-
-
Notifications
You must be signed in to change notification settings - Fork 54
Closed
Labels
enhancementNew feature or requestNew feature or request
Milestone
Description
When I extend the User / Pet model to store PetType and UserType integer backed enums, PostgreSQL will fail on the UserType property on User:
Extended User / Pet model:
import Foundation
import FluentPostgreSQL
import Vapor
/// Pet
enum PetType: Int, Codable {
case dog = 0
case cat
// It's pretty much my favorite animal. It's like a lion
// and a tiger mixed... bred for its skills in magic.
case liger
case manBearPig
}
extension PetType: KeyStringDecodable {
static var keyStringTrue: PetType {
return .dog
}
static var keyStringFalse: PetType {
return .cat
}
}
struct Pet: PostgreSQLJSONType, Codable {
var name: String
var type: PetType
}
/// User
enum UserType: Int, Codable {
case novice = 0
case skilled
case masterOfDisaster
}
extension UserType: KeyStringDecodable {
static var keyStringTrue: UserType {
return .novice
}
static var keyStringFalse: UserType {
return .skilled
}
}
final class User: PostgreSQLModel, Migration {
static let idKey: WritableKeyPath<User, Int?> = \User.id
var id: Int?
var name: String
var type: UserType = .novice
var age: Int?
var favoriteColors: [String]
var pet: Pet
init(id: Int? = nil, name: String, type: UserType, pet: Pet) {
self.favoriteColors = []
self.id = id
self.name = name
self.type = type
self.pet = pet
}
}Changing the enum types from Integer backed to String backed does not matter:
enum UserType: String, Codable {
case novice
case skilled
case masterOfDisaster
}Note that PetType is not being used in the above code other than that it's part of the nested JSONB for Pet
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
