You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.4 KiB
69 lines
1.4 KiB
#lang racket
|
|
|
|
(require json)
|
|
|
|
(define (root name type)
|
|
`(,name type))
|
|
|
|
(define ((prop
|
|
type
|
|
[index "analyzed"])
|
|
name)
|
|
(define prop-hash (make-hash))
|
|
(hash-set! prop-hash (string->symbol name)
|
|
`#hash(
|
|
(type . ,type)
|
|
(index . ,index)))
|
|
prop-hash)
|
|
|
|
(define ((dict name) ps)
|
|
(let ([prop-vals (make-hash)]
|
|
[props-hsh (make-hash)])
|
|
(for ([p ps])
|
|
(hash-set! prop-vals
|
|
(car p)
|
|
(cdr p)))
|
|
(hash-set! props-hsh name prop-vals)
|
|
props-hsh))
|
|
|
|
(define (props ps)
|
|
(define props-hash (make-hash))
|
|
(for ([p ps])
|
|
(match p
|
|
[(hash-table (k v))
|
|
(hash-set! props-hash k v)]))
|
|
`#hash((properties . ,props-hash)))
|
|
|
|
(define str (prop "string"))
|
|
|
|
(define atom (prop "string" "not_analyzed"))
|
|
|
|
(define num (prop "integer"))
|
|
|
|
(define date (prop "date"))
|
|
|
|
(define bool (prop "boolean" "not_analyzed"))
|
|
|
|
(define (dictprop name d)
|
|
(define dict (make-hash))
|
|
(hash-set! dict name d)
|
|
dict)
|
|
|
|
(define (estruct name pairs)
|
|
(define estr (make-hash))
|
|
(hash-set! estr
|
|
(string->symbol name)
|
|
(props pairs))
|
|
estr)
|
|
|
|
(define (make-mapping
|
|
type
|
|
decl)
|
|
(define mapping (make-hash))
|
|
(hash-set! mapping
|
|
(string->symbol type)
|
|
(props decl))
|
|
(jsexpr->string mapping))
|
|
|
|
(provide
|
|
(all-defined-out))
|
|
|