contract.rkt
#lang racket/base

(require racket/contract/base (only-in ffi/unsafe cpointer?))

(provide ffi-builder? ffi-function-builder? contract-out)

(define ffi-builder? 
  ((and/c (not/c #f) cpointer?) . -> . (->* ((or/c symbol? string?)) #:rest (listof any/c) any)))

(define ffi-function-builder? 
  ((and/c (not/c #f) cpointer?) . -> . (->* () #:rest (listof any/c) any)))