Skip to content

Commit

Permalink
Add some missing initializers for Entity and fix Playground sources.
Browse files Browse the repository at this point in the history
  • Loading branch information
mattpolzin committed Dec 4, 2018
1 parent 75c8ce7 commit d667e91
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
6 changes: 3 additions & 3 deletions JSONAPI.playground/Sources/Entities.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extension String: CreatableRawIdType {
}

// MARK: - Entity typealias for convenience
public typealias ExampleEntity<Description: EntityDescription> = Entity<Description, String>
public typealias ExampleEntity<Description: EntityDescription> = Entity<Description, NoMetadata, NoLinks, String>

// MARK: - A few resource objects (entities)
public enum PersonDescription: EntityDescription {
Expand Down Expand Up @@ -60,7 +60,7 @@ public enum PersonDescription: EntityDescription {

public typealias Person = ExampleEntity<PersonDescription>

public extension Entity where Description == PersonDescription, EntityRawIdType == String {
public extension Entity where Description == PersonDescription, MetaType == NoMetadata, LinksType == NoLinks, EntityRawIdType == String {
public init(id: Person.Id? = nil,name: [String], favoriteColor: String, friends: [Person], dogs: [Dog], home: House) throws {
self = try Person(id: id ?? Person.Id(), attributes: .init(name: .init(rawValue: name), favoriteColor: .init(rawValue: favoriteColor)), relationships: .init(friends: .init(entities: friends), dogs: .init(entities: dogs), home: .init(entity: home)))
}
Expand Down Expand Up @@ -89,7 +89,7 @@ public enum DogDescription: EntityDescription {

public typealias Dog = ExampleEntity<DogDescription>

public extension Entity where Description == DogDescription, EntityRawIdType == String {
public extension Entity where Description == DogDescription, MetaType == NoMetadata, LinksType == NoLinks, EntityRawIdType == String {
public init(name: String, owner: Person?) throws {
self = try Dog(attributes: .init(name: .init(rawValue: name)), relationships: DogDescription.Relationships(owner: .init(entity: owner)))
}
Expand Down
18 changes: 18 additions & 0 deletions Sources/JSONAPI/Resource/Entity.swift
Original file line number Diff line number Diff line change
Expand Up @@ -320,18 +320,36 @@ extension Entity where MetaType == NoMetadata {
}
}

extension Entity where MetaType == NoMetadata, EntityRawIdType: CreatableRawIdType {
public init(attributes: Description.Attributes, relationships: Description.Relationships, links: LinksType) {
self.init(attributes: attributes, relationships: relationships, meta: .none, links: links)
}
}

extension Entity where LinksType == NoLinks {
public init(id: Entity.Id, attributes: Description.Attributes, relationships: Description.Relationships, meta: MetaType) {
self.init(id: id, attributes: attributes, relationships: relationships, meta: meta, links: .none)
}
}

extension Entity where LinksType == NoLinks, EntityRawIdType: CreatableRawIdType {
public init(attributes: Description.Attributes, relationships: Description.Relationships, meta: MetaType) {
self.init(attributes: attributes, relationships: relationships, meta: meta, links: .none)
}
}

extension Entity where MetaType == NoMetadata, LinksType == NoLinks {
public init(id: Entity.Id, attributes: Description.Attributes, relationships: Description.Relationships) {
self.init(id: id, attributes: attributes, relationships: relationships, meta: .none, links: .none)
}
}

extension Entity where MetaType == NoMetadata, LinksType == NoLinks, EntityRawIdType: CreatableRawIdType {
public init(attributes: Description.Attributes, relationships: Description.Relationships) {
self.init(attributes: attributes, relationships: relationships, meta: .none, links: .none)
}
}

// MARK: Pointer for Relationships use.
public extension Entity where EntityRawIdType: JSONAPI.RawIdType {
/// Get a pointer to this entity that can be used as a
Expand Down

0 comments on commit d667e91

Please sign in to comment.