main.rkt
#lang racket/base

(require (for-syntax "make.rkt")
         (prefix-in ext: "extension.rkt")
         racket/contract)

(define-struct user (name uid gid home shell) #:transparent)

(define (build-user name uid gid home shell)
  (make-user
   (bytes->string/locale name)
   uid
   gid
   (bytes->path home)
   (bytes->path shell)))

(define info
  (compose
   build-user
   (case-lambda
    (() (ext:info))
    ((name) (ext:info (string->bytes/locale name))))))

(provide (struct-out user))

(provide/contract (info (->* () (string?) user?)))