20 lines
738 B
Racket
20 lines
738 B
Racket
#lang racket/base
|
|
(require racket/contract/base racket/serialize)
|
|
|
|
(define-serializable-struct url
|
|
(scheme user host port path-absolute? path query fragment)
|
|
#:mutable)
|
|
(define-serializable-struct path/param (path param))
|
|
|
|
(provide/contract
|
|
(struct url ([scheme (or/c false/c string?)]
|
|
[user (or/c false/c string?)]
|
|
[host (or/c false/c string?)]
|
|
[port (or/c false/c number?)]
|
|
[path-absolute? boolean?]
|
|
[path (listof path/param?)]
|
|
[query (listof (cons/c symbol? (or/c string? false/c)))]
|
|
[fragment (or/c false/c string?)]))
|
|
(struct path/param ([path (or/c string? (symbols 'up 'same))]
|
|
[param (listof string?)])))
|