lib/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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import x_db_sqlite, x_asynchttpserver, pegs, strtabs import config type EDatastoreExists* = object of Exception EDatastoreDoesNotExist* = object of Exception EDatastoreUnavailable* = object of Exception EInvalidTag* = object of Exception EDirectoryNotFound* = object of Exception EFileNotFound* = object of Exception EFileExists* = object of Exception EInvalidRequest* = object of Exception uarray* {.unchecked.} [T] = array[0..0, T] Datastore* = object db*: TDbConn path*: string mount*: string QueryOptions* = object select*: seq[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, opImport, opExport, opDelete, opVacuum, opOptimize LogLevel* = enum lvDebug lvInfo lvWarn lvError lvNone Logger* = object level*: LogLevel LiteStore* = object store*: Datastore address*: string port*: int operation*: Operation directory*: string file*: string mount*: bool readonly*: bool appname*: string appversion*: string favicon*:string loglevel*:string Response* = tuple[ code: HttpCode, content: string, headers: StringTableRef] ResourceInfo* = tuple[ resource: string, id: string, version: string ] var PEG_TAG* {.threadvar.}: Peg PEG_USER_TAG* {.threadvar.}: Peg PEG_DEFAULT_URL* {.threadvar.}: Peg PEG_URL* {.threadvar.}: Peg PEG_TAG = peg"""^\$? [a-zA-Z0-9_\-?~:.@#^!+]+$""" PEG_USER_TAG = peg"""^[a-zA-Z0-9_\-?~:.@#^!+]+$""" PEG_DEFAULT_URL = peg"""^\/{(docs / info)} (\/ {(.+)} / \/?)$""" PEG_URL = peg"""^\/({(v\d+)} \/) {([^\/]+)} (\/ {(.+)} / \/?)$""" # Initialize LiteStore var LS* {.threadvar.}: LiteStore var TAB_HEADERS* {.threadvar.}: array[0..2, (string, string)] LS.port = port LS.address = address LS.file = file LS.appversion = version LS.appname = appname TAB_HEADERS = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Content-Type", "Server": LS.appname & "/" & LS.appversion } proc newQueryOptions*(): QueryOptions = return QueryOptions(select: @["documents.id AS id", "documents.data AS data", "content_type", "binary", "searchable", "created", "modified"], single: false, limit: 0, offset: 0, orderby: "", tags: "", search: "") |