| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid} | ||
|---|---|---|---|
| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid}/page/{PageNumber} | ||
| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid}/{ParsedRoot*}/folder/revisited/{FolderBrowser*} | ||
| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid}/{ParsedRoot*}/folder/revisited/{FolderBrowser*}/page/{PageNumber} | ||
| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid}/{ParsedRoot*}/folder/revisited/{FolderBrowser*}/search/{SearchTerm} | ||
| GET | /{Brand}/question/{TemplateGuid}/{QuestionGuid}/{ParsedRoot*}/folder/revisited/{FolderBrowser*}/search/{SearchTerm}/page/{PageNumber} |
import Foundation
import ServiceStack
public class GetQuestion : QuestionRequestDto
{
public var parsedRoot:String
public var searchTerm:String
public var pageNumber:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case parsedRoot
case searchTerm
case pageNumber
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
parsedRoot = try container.decodeIfPresent(String.self, forKey: .parsedRoot)
searchTerm = try container.decodeIfPresent(String.self, forKey: .searchTerm)
pageNumber = try container.decodeIfPresent(Int.self, forKey: .pageNumber)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if parsedRoot != nil { try container.encode(parsedRoot, forKey: .parsedRoot) }
if searchTerm != nil { try container.encode(searchTerm, forKey: .searchTerm) }
if pageNumber != nil { try container.encode(pageNumber, forKey: .pageNumber) }
}
}
public class QuestionRequestDto : RequestBase
{
public var templateGuid:String
public var questionGuid:String
public var parent:String
public var folderBrowser:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case templateGuid
case questionGuid
case parent
case folderBrowser
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
templateGuid = try container.decodeIfPresent(String.self, forKey: .templateGuid)
questionGuid = try container.decodeIfPresent(String.self, forKey: .questionGuid)
parent = try container.decodeIfPresent(String.self, forKey: .parent)
folderBrowser = try container.decodeIfPresent(String.self, forKey: .folderBrowser)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if templateGuid != nil { try container.encode(templateGuid, forKey: .templateGuid) }
if questionGuid != nil { try container.encode(questionGuid, forKey: .questionGuid) }
if parent != nil { try container.encode(parent, forKey: .parent) }
if folderBrowser != nil { try container.encode(folderBrowser, forKey: .folderBrowser) }
}
}
public class RequestBase : DtoBase
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class DtoBase : Codable
{
public var brand:Brand
required public init(){}
}
public enum Brand : String, Codable
{
case Desktop
case Hp
case Kyocera
case NeaScan
case Samsung
case FujiXerox
case Ta
case Utax
case Epson
case ScanFront400
case Sharp
case Ricoh
case FujiFilm
}
public class GetQuestionResponse : ScanResponseBase
{
//question:IClientQuestion ignored. Swift doesn't support interface properties
public var regexMatches:Bool
public var regexHint:String
public var selectedFolder:String
//loggedInUser:IUser ignored. Swift doesn't support interface properties
//metadataParser:IMetadataParserEx ignored. Swift doesn't support interface properties
public var parsedRoot:String
public var folderBrowser:String
public var parent:String
public var searchTerm:String
public var pageNumber:Int?
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case question
case regexMatches
case regexHint
case selectedFolder
case loggedInUser
case metadataParser
case parsedRoot
case folderBrowser
case parent
case searchTerm
case pageNumber
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
question = try container.decodeIfPresent(IClientQuestion.self, forKey: .question)
regexMatches = try container.decodeIfPresent(Bool.self, forKey: .regexMatches)
regexHint = try container.decodeIfPresent(String.self, forKey: .regexHint)
selectedFolder = try container.decodeIfPresent(String.self, forKey: .selectedFolder)
loggedInUser = try container.decodeIfPresent(IUser.self, forKey: .loggedInUser)
metadataParser = try container.decodeIfPresent(IMetadataParserEx.self, forKey: .metadataParser)
parsedRoot = try container.decodeIfPresent(String.self, forKey: .parsedRoot)
folderBrowser = try container.decodeIfPresent(String.self, forKey: .folderBrowser)
parent = try container.decodeIfPresent(String.self, forKey: .parent)
searchTerm = try container.decodeIfPresent(String.self, forKey: .searchTerm)
pageNumber = try container.decodeIfPresent(Int.self, forKey: .pageNumber)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if question != nil { try container.encode(question, forKey: .question) }
if regexMatches != nil { try container.encode(regexMatches, forKey: .regexMatches) }
if regexHint != nil { try container.encode(regexHint, forKey: .regexHint) }
if selectedFolder != nil { try container.encode(selectedFolder, forKey: .selectedFolder) }
if loggedInUser != nil { try container.encode(loggedInUser, forKey: .loggedInUser) }
if metadataParser != nil { try container.encode(metadataParser, forKey: .metadataParser) }
if parsedRoot != nil { try container.encode(parsedRoot, forKey: .parsedRoot) }
if folderBrowser != nil { try container.encode(folderBrowser, forKey: .folderBrowser) }
if parent != nil { try container.encode(parent, forKey: .parent) }
if searchTerm != nil { try container.encode(searchTerm, forKey: .searchTerm) }
if pageNumber != nil { try container.encode(pageNumber, forKey: .pageNumber) }
}
}
public class ScanResponseBase : ResponseBase
{
//template:IClientTemplate ignored. Swift doesn't support interface properties
public var globalQuestions:[IClientQuestion] = []
public var canEnableScanButton:Bool
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case template
case globalQuestions
case canEnableScanButton
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
template = try container.decodeIfPresent(IClientTemplate.self, forKey: .template)
globalQuestions = try container.decodeIfPresent([IClientQuestion].self, forKey: .globalQuestions) ?? []
canEnableScanButton = try container.decodeIfPresent(Bool.self, forKey: .canEnableScanButton)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if template != nil { try container.encode(template, forKey: .template) }
if globalQuestions.count > 0 { try container.encode(globalQuestions, forKey: .globalQuestions) }
if canEnableScanButton != nil { try container.encode(canEnableScanButton, forKey: .canEnableScanButton) }
}
}
public class ResponseBase : DtoBase
{
public var selectedUiLanguage:String
public var svSession:String
public var title:String
public var pageTip:String
public var newBrowser:Bool
public var scanFront400TA:Bool
public var scanFront400UTAX:Bool
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case selectedUiLanguage
case svSession
case title
case pageTip
case newBrowser
case scanFront400TA
case scanFront400UTAX
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
selectedUiLanguage = try container.decodeIfPresent(String.self, forKey: .selectedUiLanguage)
svSession = try container.decodeIfPresent(String.self, forKey: .svSession)
title = try container.decodeIfPresent(String.self, forKey: .title)
pageTip = try container.decodeIfPresent(String.self, forKey: .pageTip)
newBrowser = try container.decodeIfPresent(Bool.self, forKey: .newBrowser)
scanFront400TA = try container.decodeIfPresent(Bool.self, forKey: .scanFront400TA)
scanFront400UTAX = try container.decodeIfPresent(Bool.self, forKey: .scanFront400UTAX)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if selectedUiLanguage != nil { try container.encode(selectedUiLanguage, forKey: .selectedUiLanguage) }
if svSession != nil { try container.encode(svSession, forKey: .svSession) }
if title != nil { try container.encode(title, forKey: .title) }
if pageTip != nil { try container.encode(pageTip, forKey: .pageTip) }
if newBrowser != nil { try container.encode(newBrowser, forKey: .newBrowser) }
if scanFront400TA != nil { try container.encode(scanFront400TA, forKey: .scanFront400TA) }
if scanFront400UTAX != nil { try container.encode(scanFront400UTAX, forKey: .scanFront400UTAX) }
}
}
public protocol IClientTemplate
{
var Description:String { get set }
var icon:[UInt8] { get set }
//modificationInfo:ITemplateModificationInfo ignored. Swift doesn't support interface properties
var name:String { get set }
var questions:[IClientQuestion] { get set }
//template:ITemplate ignored. Swift doesn't support interface properties
var templateGuid:String { get set }
}
public protocol ITemplateModificationInfo
{
var guid:String { get set }
var templateModificationDateTime:Date { get set }
var iconModificationDateTime:Date { get set }
}
public protocol IClientQuestion : ITemplateQuestion
{
var questionGuid:String { get set }
var valueDisplayed:String { get set }
var valueReturned:String { get set }
var answered:Bool { get set }
var regexMatches:Bool { get set }
var regexHint:String { get set }
}
public protocol ITemplate : IStatus
{
var templateVersion:String { get set }
var scannerVisionVersion:String { get set }
var guid:String { get set }
var beginScript:String { get set }
var endScript:String { get set }
var templateType:TemplateType { get set }
//general:IGeneral ignored. Swift doesn't support interface properties
//capture:ICapture ignored. Swift doesn't support interface properties
//xmlMetadataImport:IXmlMetadataImport ignored. Swift doesn't support interface properties
//notifications:INotifications ignored. Swift doesn't support interface properties
//validator:IValidator ignored. Swift doesn't support interface properties
}
public enum TemplateType : String, Codable
{
case Workflow
case FreeForm
}
public protocol IGeneral : IInterface
{
var name:String { get set }
var Description:String { get set }
var icon:String { get set }
//schedule:ITemplateSchedule ignored. Swift doesn't support interface properties
//rejection:IRejection ignored. Swift doesn't support interface properties
//badDocumentRejection:IBadDocumentRejection ignored. Swift doesn't support interface properties
var pdfLoadResolution:PdfLoadResolution? { get set }
}
public protocol ITemplateSchedule : IInterface
{
var time:TimeInterval? { get set }
var endTime:TimeInterval? { get set }
var noEndTime:Bool? { get set }
var type:TemplateScheduleType? { get set }
}
public enum TemplateScheduleType : String, Codable
{
case Interval
case Fixed
}
public protocol IRejection
{
var rejectAfter:Int? { get set }
var rejectionPath:String { get set }
//shareCredentials:ICredentials ignored. Swift doesn't support interface properties
}
public protocol ICredentials : IInterface
{
var username:String { get set }
var password:String { get set }
}
public protocol IBadDocumentRejection : IStatus
{
var rejectionPath:String { get set }
//shareCredentials:ICredentials ignored. Swift doesn't support interface properties
}
public enum PdfLoadResolution : String, Codable
{
case Default
case Dpi100
case Dpi150
case Dpi200
case Dpi300
case Dpi400
case Dpi500
case Dpi600
}
public protocol ICapture : IInterface
{
var captureSources:ReadOnlyCollection<ICaptureSource> { get set }
}
public protocol ICaptureSource : IStatus
{
}
public protocol IXmlMetadataImport : IStatus
{
var sampleDocumentName:String { get set }
var tagMappings:ReadOnlyCollection<IXmlMetadataImportTagMapping> { get set }
var namespaceMappings:ReadOnlyCollection<IXmlMetadataImportNamespaceMapping> { get set }
}
public protocol IXmlMetadataImportTagMapping : IInterface
{
var xPathExpression:String { get set }
//metadata:IStringMetadata ignored. Swift doesn't support interface properties
}
public protocol IStringMetadata : IMetadata
{
var isSecure:Bool? { get set }
var sampleValue:String { get set }
var value:String { get set }
}
public protocol IXmlMetadataImportNamespaceMapping : IInterface
{
var `prefix`:String { get set }
var name:String { get set }
}
public protocol INotifications : IStatus
{
var notifications:ReadOnlyCollection<INotification> { get set }
}
public protocol INotification : IStatus
{
var Description:String { get set }
var to:String { get set }
var subject:String { get set }
var body:String { get set }
var cc:String { get set }
var bcc:String { get set }
var notificationType:NotificationType? { get set }
}
public enum NotificationType : String, Codable
{
case FailureOnly
case SuccessOnly
case Always
}
public protocol IValidator
{
//validationErrors:IValidationErrors ignored. Swift doesn't support interface properties
var isValid:Bool { get set }
}
public protocol IValidationErrors
{
var errors:ReadOnlyCollection<IValidationError> { get set }
}
public protocol IValidationError
{
var property:String { get set }
var errorMessage:String { get set }
}
public protocol IUser : IIdTemplatesItem
{
var groups:ReadOnlyCollection<IUserGroup> { get set }
var emailAddress:String { get set }
var hasPassword:Bool { get set }
var homeFolder:String { get set }
var password:String { get set }
var sbcUser:Bool? { get set }
}
public protocol IUserGroup : IIdTemplatesItem, IGroup
{
var users:ReadOnlyCollection<IUser> { get set }
}
public protocol IMetadataParserEx : IMetadataParser
{
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /{Brand}/question/{TemplateGuid}/{QuestionGuid} HTTP/1.1
Host: buildmax.org
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{Unable to show example output for type 'GetQuestionResponse' using the custom 'csv' filter}No parameterless constructor defined for this object.