Search code examples
swiftpostgresqlrestfluentvapor

Argument labels '(content:)' do not match any available overloads, swift ,vapor,rest in vapor ,using postgresql


Error Argument labels '(content:)' do not match any available overloads.using postgresql while the rest in vapor to get json representable.The syntax for model controller is as followed, meaning for content in database

import Foundation
import Vapor
import FluentProvider
import PostgreSQLProvider


final class dataPointStorage: Model, JSONRepresentable, NodeRepresentable {

//  var _data: dataPointProtocol?
//    var _data:[dataPointProtocol] = []
    let storage = Storage()
    var id: Node?
    var name:String
    var displayName:String
    var content:String
//    let temp = dataPointStorage()


    init(node:Node ,content: String?, displayName:String, name:String) {
        self.id = nil
        self.displayName = displayName
        self.name = name
    }

        static let idKey = "id"
        static let contentKey = "content"



    func forDataBase() {


        let array:[berichtDataPoint] = [intDataPoint(), boolDataPoint(), doubleDataPoint()]

        let _ = array[0] as! intDataPoint
        let _ = array[1] as! doubleDataPoint


        for point in array {

            switch point {
            case is  intDataPoint:
                print("int")
            case is doubleDataPoint:
                print("double")
            case is boolDataPoint:
                print("bool")
            default:
                print("error")
            }
        }

    }

  func makeRow() throws -> Row {
        var row = Row()
        try row.set("id", id)
        try row.set("displayName", displayName)
        try row.set("name", name)
        return row
    }

    init(row: Row) throws {
        id = try row.get("id")
        displayName = try row.get("displayName")
        name = try row.get("name")
    }

    func makeNode(context: Context) throws -> Node {
        return try Node(node: [
            "id": id,
            "displayName": displayName,
            "name": name
            ])
    }
}

extension dataPointStorage: Preparation {
    static func prepare(_ database: Database) throws {
        try database.create(self) { dataPointStorage in
            dataPointStorage.id()
            dataPointStorage.string("displayName")
            dataPointStorage.string("name")
            dataPointStorage.string("content")

        }
    }

    static func revert(_ database: Database) throws {
        try database.delete(dataPointStorage)
    }
}

extension dataPointStorage: JSONConvertible {
    convenience init(json: JSON) throws {
        try self.init(
       error here¶¶¶ content: json.get(dataPointStorage.contentKey)¶¶¶¶ error
        )
    }

    func makeJSON() throws -> JSON {
        var json = JSON()
        try json.set("id", id)
        try json.set("name", name)
        try json.set("displaName", displayName)
        try json.set("content", Content)

        return json
    }
}

I am following the general context of rest in vapor as JSON representable but didn't get the reason of this simple error to solve.


Solution

  • It looks like you are trying to call this init?

    init(node:Node ,content: String?, displayName:String, name:String)
    

    If that is the case, you need to pass in the rest of the arguments because there are no default values available for them:

    convenience init(json: JSON) throws {
        try self.init(
            node: <VALUE>,
            content: json.get(dataPointStorage.contentKey),
            displayName: <VALUE>,
            name: <VALULE>
        )
    }
    

    That will fix your problem.