Module shiori

SHIORI Protocol Parser/Builder

This is released under MIT License.

Example:

import shiori

let request = parseRequest("GET SHIORI/3.0\nCharset: UTF-8\n\n")
echo $request

var response = newResponse(status: Status.OK, headers: {"Value": "foo"}.newOrderedTable)
response.version = "3.0"
response.charset = "UTF-8"
echo $response

Types

Protocol* = enum
  SHIORI
SHIORI protocol
Method* = enum
  GET,                        ## SHIORI/3.0 GET
  NOTIFY,                     ## SHIORI/3.0 NOTIFY
  GET_Version,                ## SHIORI/2.x GET Version
  GET_Sentence,               ## SHIORI/2.x GET Sentence
  GET_Word,                   ## SHIORI/2.x GET Word
  GET_Status,                 ## SHIORI/2.x GET Status
  TEACH,                      ## SHIORI/2.x TEACH
  GET_String,                 ## SHIORI/2.x GET String
  NOTIFY_OwnerGhostName,      ## SHIORI/2.x NOTIFY OwnerGhostName
  NOTIFY_OtherGhostName,      ## SHIORI/2.x NOTIFY OtherGhostName
  TRANSLATE_Sentence          ## SHIORI/2.x TRANSLATE Sentence
SHIORI request method
Status* = enum
  OK = 200,                     ## 200 OK
  No_Content = 204,             ## 204 No Content
  Not_Enough = 311,             ## 311 Not Enough
  Advice = 312,                 ## 312 Advice
  Bad_Request = 400,            ## 400 Bad Request
  Internal_Server_Error = 500   ## 500 Internal Server Error
SHIORI response status
Headers* = OrderedTableRef[string, string]
SHIORI message headers
Request* = ref object
  `method`*: Method
  protocol*: Protocol
  version*: string
  headers*: Headers
SHIORI request message
Response* = ref object
  protocol*: Protocol
  version*: string
  status*: Status
  headers*: Headers
SHIORI response message
ErrorLevel* = enum
  info, notice, warning, error, critical
SHIORI ErrorLevel header value
SecurityLevel* = enum
  local, external
SHIORI SecurityLevel header value

Procs

proc `$`*(meth: Method): string
proc `$`*(status: Status): string
proc toShioriString*(headers: Headers): string
proc newRequest*(`method` = Method.GET; protocol = Protocol.SHIORI; version = "3.0";
                headers = newOrderedTable[string, string]()): Request
proc `$`*(request: Request): string
proc id*(request: Request): string
ID header
proc `id =`*(request: Request; value: string): string {.
discardable
.}
ID header
proc status*(request: Request): string
Status header
proc `status =`*(request: Request; value: string): string {.
discardable
.}
Status header
proc baseId*(request: Request): string
BaseId header
proc `baseId =`*(request: Request; value: string): string {.
discardable
.}
BaseId header
proc newResponse*(protocol = Protocol.SHIORI; version = "3.0"; status = Status.OK;
                 headers = newOrderedTable[string, string]()): Response
proc `$`*(response: Response): string
proc statusCode*(response: Response): int
proc `statusCode =`*(response: Response; value: Natural): Status {.
discardable
.}
proc value*(response: Response): string
Value header
proc `value =`*(response: Response; value: string): string {.
discardable
.}
Value header
proc marker*(response: Response): string
Marker header
proc `marker =`*(response: Response; value: string): string {.
discardable
.}
Marker header
proc requestCharset*(response: Response): string
RequestCharset header
proc `requestCharset =`*(response: Response; value: string): string {.
discardable
.}
RequestCharset header
proc errorLevel*(response: Response): ErrorLevel
proc `errorLevel =`*(response: Response; value: ErrorLevel): string {.
discardable
.}
proc errorDescription*(response: Response): string
ErrorDescription header
proc `errorDescription =`*(response: Response; value: string): string {.
discardable
.}
ErrorDescription header
proc charset*(message: Request or Response): string
Charset header
proc `charset =`*(message: Request or Response; value: string): string {.
discardable
.}
Charset header
proc sender*(message: Request or Response): string
Sender header
proc `sender =`*(message: Request or Response; value: string): string {.
discardable
.}
Sender header
proc securityLevel*(message: Request or Response): SecurityLevel
proc `securityLevel =`*(message: Request or Response; value: SecurityLevel): string {.
discardable
.}
proc reference*(message: Request or Response; index: int): string
Reference* header
proc reference*(message: Request or Response; index: int; value: string): string {.
discardable
.}
Reference* header
proc separated*(str: string; sep = "\x01"): seq[string]
separate string into seq[string] for some header values
proc separated2*(str: string; sep1 = "\x02"; sep2 = "\x01"): seq[seq[string]]
separate string into seq[seq[string]] for some header values
proc combined*(list: seq[string]; sep = "\x01"): string
join seq[string] into string for some header values
proc combined2*(list: seq[seq[string]]; sep1 = "\x02"; sep2 = "\x01"): string
join seq[seq[string]] into string for some header values
proc parseRequest*(requestStr: string): Request
SHIORI request parser
proc parseResponse*(responseStr: string): Response
SHIORI response parser