# Cwtch Autobindings ## Building go mod download go run generate/generate_bindings.go make linux // alternatively windows, android, macos ## Spec File Format The current Cwtch Bindings Specification is defined in [spec](./spec) Supported function prototypes: * `app ` - an application-level function, called on global `Application` * `profile ` - a profile-level function, takes `profile` as an implicit first argument * `json(profile) ` - a profile-level function, takes `profile` as an implicit first argument and returns a json blob that must be freed by the calling library * `@profile-experiment `- an experimental profile-level function, takes `profile` as an implicit first argument, experiment must implement cwtch Functionality interface * `@(json)profile-experiment ` - am experimental profile-level function, takes `profile` as an implicit first argument and returns a json blob that must be freed by the calling library, , experiment must implement cwtch Functionality interface Supported argument prototypes: * `profile` - a cwtch profile identifier * `conversation` - a cwtch conversation identifier * `message` - a cwtch message identifier * `int:` - a generic integer argument (with optional name) * `bool:` - a generic boolean argument (with optional name) * `string:` - a generic string argument (with optional name) All arguments must be defined in the order they are specified by the underlying Cwtch library function. Other directives: * `import ` - includes an additional go importin the compiled lib.go (needed for experiments) * Functions that start with `Enhanced` are automatically stripped of that prefix for their binding names e.g. `EnhancedGetMessage` generated a binding `c_GetMessage` - for certain functions Cwtch has two potential calling options `` and `Enhanced`. "Enhanced" in this case means that the response is optimised for calling by a user-facing application by e.g. directly making a number of calls under the hood and returning a json blob of the results.