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