destination.ss
#lang scheme

(require net/url-structs)

(define-struct dest (host port ssl?) #:transparent)
(define (make host port [ssl? #f])
  (make-dest host port ssl?))
(define host dest-host)
(define port dest-port)
(define ssl? dest-ssl?)
(require net/url-structs)

(define (parse-uri uri)
  (let ([ssl? (equal? (url-scheme uri) "https")])
    (make-dest (url-host uri) 
               (or (url-port uri)
                   (if ssl?
                       443
                       80))
               ssl?)))

(provide/contract
 [make (->* (string? integer?) (boolean?) dest?)]
 [host (-> dest? string?)]
 [port (-> dest? integer?)]
 [ssl? (-> dest? boolean?)]
 [parse-uri (-> url? dest?)]
 [dest? (-> any/c boolean?)])