     case emptyQuery
     case invalidQuery(message: String)
     case fatalError(message: String)
+}
+
+/// connection details to database
+public protocol RopeCredentials {
+    var host: String { get }
+    var dbName: String { get }
+    var user: String { get }
+    var password: String { get }
+    var port: Int { get }
 }
 
 public final class Rope {

        try? close()
    }

    public static func connect(host: String = "localhost", port: Int = 5432, dbName: String,
                               user: String, password: String) throws -> Rope {
        let rope = Rope()

        self.conn = conn
    }

    /// query database with SQL statement
    public func query(_ statement: String) throws -> RopeResult? {
        return try execQuery(statement: statement)
    }

    /// query database with SQL statement, use $1, $2, etc. for params in SQL
    public func query(statement: String, params: [Any]) throws -> RopeResult? {
        return try execQuery(statement: statement, params: params)
    }
