base.rkt
#lang racket/base

(require "data.rkt")

(provide
 (struct-out qr-spec))

(struct qr-spec
  (version edc-level data)
  #:guard (lambda (version edc-level data name)
            (unless (exact-integer? version)
              (error name "version not an exact integer: ~a" version))
            (unless (<= 1 version 40)
              (error name "version not between 1 and 40: ~a" version))
            (unless (memq edc-level '(L M Q H))
              (error name "edc level not one of L, M, Q, H: ~a" edc-level))
            (unless (qr-data? data)
              (error name "data not qr-data: ~a" data))
            (values version edc-level data))
  #:transparent)