(module struct-props mzscheme
(require-for-syntax "../stx.ss")
(provide define-struct-property)
(define-syntax (define-struct-property stx)
(syntax-case stx ()
[(_ name . optional-guard)
(and (identifier? #'name)
(syntax-matches-pattern #'optional-guard () (g) ()))
(with-syntax ([predicate
(datum->syntax-object #'name (symbol-append #'name '?))]
[accessor
(datum->syntax-object #'name (symbol-append #'name '-value))])
#'(define-values (name predicate accessor)
(make-struct-type-property 'name . optional-guard)))]))
)