racket-bertrpc.rkt
; Author: Yasir M. Arsanukaev <yarsanukaev AT gmail DOT com>
; License: The 2-clause BSD license. See LICENSE for details.

#lang racket

(require "encodes.rkt")
(require "errors.rkt")
(require "transport.rkt")

(require racket/mpair)

(provide call cast from-uri)
  
(define (action kind transport m f a)
  (let* ((bert-request (encode-scheme-request (vector kind m f a)))
         (bert-response (recvt (sendt transport bert-request))))
    (decode-bert-response bert-response)))

(define call
  ((curry action) 'call))

(define cast
  ((curry action) 'cast))

; Sample call
; (call (from-uri "bert://192.168.32.40:9999") 'nat 'add (list 5 9))