all repos — litestore @ 55556dcb64a73be868f2385f3eae0905e2c2fad2

A minimalist nosql document store.

types.nim

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
import db_sqlite, pegs, asynchttpserver2, strtabs 

type 
  EDatastoreExists* = object of Exception
  EDatastoreDoesNotExist* = object of Exception
  EDatastoreUnavailable* = object of Exception
  EInvalidTag* = object of Exception
  EDirectoryNotFound* = object of Exception
  EInvalidRequest* = object of Exception
  Datastore* = object
    db*: TDbConn
    path*: string
  QueryOptions* = object
    select*: string
    single*:bool         
    limit*: int           
    offset*: int           
    orderby*: string      
    tags*: string
    search*: string
  TagExpression* = object
    tag*: string
    startswith*: bool
    endswith*: bool
    negated*: bool
  Operation* = enum opRun, opPack, opUnpack
  LiteStore* = object
    store*: Datastore
    address*: string
    port*: int
    operation*: Operation
    directory*: string
    file*: string
    readonly*: bool
    appname*: string
    appversion*: string
  Response* = tuple[
    code: HttpCode,
    content: string,
    headers: StringTableRef]
  ResourceInfo* = tuple[
    resource: string,
    id: string,
    version: string
  ]

let PEG_TAG* = peg"""
^\$? [a-zA-Z0-9_\-?~:.@#^!]+$
"""

let PEG_USER_TAG* = peg"""
^[a-zA-Z0-9_\-?~:.@#^!]+$
"""

let PEG_URL* = peg"""
  ^\/{(v\d+)} \/ {([^\/]+)} (\/ {(.+)} / \/?)$
"""

const 
  CT_JSON* = {"Content-Type": "application/json"}

proc ctHeader*(ct: string): StringTableRef =
  return {"Content-Type": ct}.newStringTable

proc ctJsonHeader*(): StringTableRef =
  return CT_JSON.newStringTable

proc newQueryOptions*(): QueryOptions =
  return QueryOptions(select: "*", single: false, limit: 0, offset: 0, orderby: "", tags: "", search: "")