Skip to content
pkgdcl.lisp 6.71 KiB
Newer Older
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                                                                  ;;;
;;; Free Software published under an MIT-like license. See LICENSE   ;;;
;;; Copyright (c) 2012 Google, Inc.  All rights reserved.            ;;;
;;;                                                                  ;;;
;;; Original author: Scott McKay                                     ;;;
;;;                                                                  ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(in-package "CL-USER")


;;; Package declaration for Protobufs

(defpackage protobufs
  (:nicknames :proto)
  ;; Some types useful for defining messages
   "INT32"
   "INT64"
   "UINT32"
   "UINT64"
   "SINT32"
   "SINT64"
   "FIXED32"
   "FIXED64"
   "SFIXED32"
   "SFIXED64"
   "PROTOBUF-ENUM"
   "PROTOBUF-ENUM-VALUE"
   "PROTOBUF-MESSAGE"
Scott McKay's avatar
Scott McKay committed
   "PROTOBUF-EXTENSION"
   "PROTOBUF-TYPE-ALIAS"        ;Lisp-only extension
   ;; Conditions
   "UNDEFINED-FIELD-TYPE"
   "UNDEFINED-INPUT-TYPE"
   "UNDEFINED-OUTPUT-TYPE"
   "UNDEFINED-STREAM-TYPE"
   "ERROR-TYPE-NAME"
   "ERROR-FIELD"
   "ERROR-METHOD"

   ;; Object lookup
   "FIND-MESSAGE"
   "FIND-MESSAGE-FOR-CLASS"
   "FIND-SCHEMA"
   "FIND-SERVICE"

   "PARSE-SCHEMA-FROM-FILE"
   "PARSE-SCHEMA-FROM-STREAM"
   "WRITE-SCHEMA"
   ;; Protobuf defining macros
   "DEFINE-ENUM"
   "DEFINE-MESSAGE"
   "DEFINE-EXTEND"
   "DEFINE-EXTENSION"
   "DEFINE-TYPE-ALIAS"          ;Lisp-only extension
   ;; Upgradability and equality testing
   "SCHEMA-UPGRADABLE"
   "SCHEMAS-EQUAL"
   ;; CLOS to Protobufs transformer
   "WRITE-SCHEMA-FOR-CLASSES"
   "GENERATE-SCHEMA-FOR-CLASSES"
   ;; Serialization and deserialization (wire format)
   "SERIALIZE-OBJECT-TO-FILE"
   "SERIALIZE-OBJECT-TO-STREAM"
   "SERIALIZE-OBJECT-TO-BYTES"
   "DESERIALIZE-OBJECT-FROM-FILE"
   "DESERIALIZE-OBJECT-FROM-STREAM"
   "DESERIALIZE-OBJECT-FROM-BYTES"
   ;; Serialization and deserialization (text format)
   "PARSE-TEXT-FORMAT"
   "GET-EXTENSION"
   "SET-EXTENSION"
   "HAS-EXTENSION"

  ;; The Python "compatibility" API
   "OCTET-SIZE"
   "SERIALIZE"
   "MERGE-FROM-ARRAY"
   "MERGE-FROM-MESSAGE")

  ;; Miscellany
  (:export
   "OBJECT-INITIALIZED-P"
   "SLOT-INITIALIZED-P"
   "REINITIALIZE-OBJECT"
   "REINITIALIZE-FIELD"
   "REINITIALIZE-SLOT"))


(defpackage protobufs-implementation
  (:nicknames :proto-impl)
  (:use :common-lisp :protobufs)
  (:shadow
   "FIND-METHOD")
  (:import-from :closer-mop
   "CLASS-SLOTS"
   "CLASS-DIRECT-SLOTS"
   "CLASS-PRECEDENCE-LIST"
   "CLASS-FINALIZED-P"
   "FINALIZE-INHERITANCE"
   "SLOT-DEFINITION-NAME"
   "SLOT-DEFINITION-TYPE"
   "SLOT-DEFINITION-INITFORM"
   "SLOT-DEFINITION-INITFUNCTION"
   "SLOT-DEFINITION-READERS"
   "SLOT-DEFINITION-WRITERS")

  (:export
   ;; Model class protocol
   "ABSTRACT-PROTOBUF"
   "BASE-PROTOBUF"
   "PROTO-DOCUMENTATION"
Scott McKay's avatar
Scott McKay committed
   "PROTO-EXTENSION-FROM"
   "PROTO-EXTENSION-TO"
Scott McKay's avatar
Scott McKay committed
   "PROTO-EXTENDERS"
Scott McKay's avatar
Scott McKay committed
   "PROTO-EXTENSIONS"
   "PROTO-IMPORTS"
   "PROTO-OPTIONS"
   "PROTO-OUTPUT-TYPE"
   "PROTO-PACKAGE"
   "PROTO-PACKED"
   "PROTO-SOURCE-LOCATION"
   "PROTO-STREAMS-NAME"
   "PROTO-STREAMS-TYPE"
   "PROTO-SYNTAX"
   "PROTO-TYPE"
   "PROTO-VALUE"
   "PROTO-VALUES"
   ;; Type aliases, a Lisp-only extension
   "PROTO-TYPE-ALIASES"
   "PROTO-LISP-TYPE"
   "PROTO-PROTO-TYPE"
   "PROTO-SERIALIZER"
   "PROTO-DESERIALIZER"
   "FIND-TYPE-ALIAS"

   ;; Controls
   "*PROTOBUF*"
   "*PROTOBUF-PACKAGE*"
   "*PROTOBUF-CONC-NAME*"
   "*PROTOBUF-SEARCH-PATH*"
   "*PROTOBUF-OUTPUT-PATH*"
   ;; Object lookup
   "*ALL-SCHEMAS*"
   "*ALL-MESSAGES*"
   "FIND-METHOD"                ;if you ":use proto-impl", watch for name clash
   "ENSURE-ALL-SCHEMAS"
   "ENSURE-SCHEMA"
   ;; CLOS to Protobufs transformer
   "*ALIAS-EXISTING-CLASSES*"
   "CLASS-TO-PROTOBUF-MESSAGE"
   "SLOT-TO-PROTOBUF-FIELD"
   "LISP-TYPE-TO-PROTOBUF-TYPE"
   "CLOS-TYPE-TO-PROTOBUF-TYPE"
   "CLOS-TYPE-TO-PROTOBUF-REQUIRED"
   "CLOS-INIT-TO-PROTOBUF-DEFAULT"
   "PROTOBUF-DEFAULT-TO-CLOS-INIT"

   ;; Serialization
   "SERIALIZE-PRIM"
   "SERIALIZE-PACKED"
   "SERIALIZE-ENUM"
   "DESERIALIZE-PRIM"
   "DESERIALIZE-PACKED"
   "DESERIALIZE-ENUM"
   "PRIM-SIZE"
   "PACKED-SIZE"
   "ENUM-SIZE"
   "GENERATE-SERIALIZER"
   "GENERATE-DESERIALIZER"
   "GENERATE-OBJECT-SIZE"

   ;; Raw encoding and decoding
   "$WIRE-TYPE-VARINT"
   "$WIRE-TYPE-64BIT"
   "$WIRE-TYPE-STRING"
   "$WIRE-TYPE-START-GROUP"
   "$WIRE-TYPE-END-GROUP"
   "ENCODE-UINT32"
   "ENCODE-UINT64"
   "ENCODE-FIXED32"
   "ENCODE-FIXED64"
   "ENCODE-SFIXED32"
   "ENCODE-SFIXED64"
   "ENCODE-SINGLE"
   "ENCODE-DOUBLE"
   "ENCODE-STRING"
   "ENCODE-OCTETS"
   "ZIG-ZAG-ENCODE32"
   "ZIG-ZAG-ENCODE64"
   "DECODE-UINT32"
   "DECODE-UINT64"
   "DECODE-FIXED32"
   "DECODE-FIXED64"
   "DECODE-SFIXED32"
   "DECODE-SFIXED64"
   "DECODE-SINGLE"
   "DECODE-DOUBLE"
   "DECODE-STRING"
   "DECODE-OCTETS"
   "ZIG-ZAG-DECODE32"
   "ZIG-ZAG-DECODE64"
   "LENGTH32"
   "LENGTH64"
   "CLASS-NAME->PROTO"
   "ENUM-NAME->PROTO"
   "SLOT-NAME->PROTO"
   "PROTO->CLASS-NAME"
   "PROTO->ENUM-NAME"
   "PROTO->SLOT-NAME"
   "PROTOBUFS-WARNING"

   ;; Stuff for ASDF
   "PARSE-PROTOBUF-FILE"

   ;; Stuff for RPC stubs
   "*RPC-PACKAGE*"
   "*RPC-CALL-FUNCTION*"))