{"id":33173495,"url":"https://github.com/fukamachi/smithy-lisp","last_synced_at":"2026-01-17T07:46:27.888Z","repository":{"id":313991766,"uuid":"1000905405","full_name":"fukamachi/smithy-lisp","owner":"fukamachi","description":"Smithy code generator for Common Lisp","archived":false,"fork":false,"pushed_at":"2025-08-31T14:31:01.000Z","size":13861,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-02T12:21:15.813Z","etag":null,"topics":["common-lisp","smithy"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fukamachi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-12T13:56:20.000Z","updated_at":"2025-10-06T10:20:59.000Z","dependencies_parsed_at":"2025-09-10T00:29:52.054Z","dependency_job_id":"d832f97e-a221-46a5-9a16-ae5a50e5147e","html_url":"https://github.com/fukamachi/smithy-lisp","commit_stats":null,"previous_names":["fukamachi/smithy-lisp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fukamachi/smithy-lisp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fukamachi%2Fsmithy-lisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fukamachi%2Fsmithy-lisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fukamachi%2Fsmithy-lisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fukamachi%2Fsmithy-lisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fukamachi","download_url":"https://codeload.github.com/fukamachi/smithy-lisp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fukamachi%2Fsmithy-lisp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285503668,"owners_count":27182913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-20T02:00:05.334Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common-lisp","smithy"],"created_at":"2025-11-16T02:00:25.441Z","updated_at":"2025-11-20T20:01:14.426Z","avatar_url":"https://github.com/fukamachi.png","language":"Common Lisp","funding_links":[],"categories":["Implementations"],"sub_categories":["Server Code Generators"],"readme":"# Smithy Common Lisp\n\nA Common Lisp code generator for [Smithy](https://smithy.io/) protocol specifications that generates client libraries from Smithy JSON AST files. Primarily designed for generating AWS SDK clients.\n\n\u003e **Looking for an AWS SDK for Common Lisp?** Check out [pira](https://github.com/fukamachi/pira) - a ready-to-use AWS SDK generated by this library.\n\n## Overview\n\nThis library provides two main components:\n\n1. **Code Generator**: Converts Smithy JSON AST files into Common Lisp code\n2. **Runtime SDK**: Provides macros and infrastructure for defining SDK operations manually\n\nThe codegen system reads Smithy JSON specifications and generates complete Common Lisp client libraries with type definitions, operations, and protocol implementations.\n\n## Code Generation\n\n### Basic Usage\n\nGenerate Common Lisp code from Smithy JSON files:\n\n```lisp\n(ql:quickload :smithy)\n\n;; Generate from a single JSON file\n(smithy:codegen-from-json #P\"path/to/service.json\"\n                          :package-name \"my-service\"\n                          :output #P\"output/my-service.lisp\")\n\n;; Generate multiple AWS services\n(smithy:codegen #P\"path/to/aws-models/\" #P\"output/services/\"\n                :services '(\"s3\" \"ec2\" \"lambda\")\n                :prefix \"aws/\"\n                :base-error-name 'aws-error)\n```\n\n### Generated Code Structure\n\nThe generator creates:\n\n- **Type definitions** using `define-type`, `define-list`, `define-map`, `define-enum`\n- **Structure definitions** using `define-structure`, `define-input`, `define-output`, `define-error`\n- **Service definitions** using `define-service`\n- **Operation definitions** using `define-operation`\n\nExample generated code for S3:\n```lisp\n;; Type definitions\n(smithy/sdk:define-type streaming-blob smithy/sdk:blob)\n(smithy/sdk:define-list buckets :member (bucket :xml-name \"Bucket\"))\n\n;; Input structure (minimal for list-buckets)\n(smithy/sdk:define-input list-buckets-request ()\n  ((max-buckets :target-type integer\n                :member-name \"MaxBuckets\"\n                :http-query \"max-buckets\"))\n  (:shape-name \"ListBucketsRequest\"))\n\n;; Output structure\n(smithy/sdk:define-output list-buckets-output ()\n  ((buckets :target-type buckets :member-name \"Buckets\")\n   (owner :target-type owner :member-name \"Owner\"))\n  (:shape-name \"ListBucketsOutput\"))\n\n;; Operation definition\n(smithy/sdk:define-operation list-buckets\n  :shape-name \"ListBuckets\"\n  :input list-buckets-request\n  :output list-buckets-output\n  :method \"GET\"\n  :uri \"/?x-id=ListBuckets\")\n\n;; More complex input with HTTP bindings\n(smithy/sdk:define-input get-object-request ()\n  ((bucket :target-type bucket-name\n           :required t\n           :member-name \"Bucket\"\n           :http-label t)\n   (key :target-type object-key\n        :required t\n        :member-name \"Key\"\n        :http-label t)\n   (if-match :target-type string\n             :member-name \"IfMatch\"\n             :http-header \"If-Match\"))\n  (:shape-name \"GetObjectRequest\"))\n\n;; Output with payload\n(smithy/sdk:define-output get-object-output ()\n  ((body :target-type streaming-blob\n         :member-name \"Body\"\n         :http-payload t)\n   (content-type :target-type string\n                 :member-name \"ContentType\"\n                 :http-header \"Content-Type\"))\n  (:shape-name \"GetObjectOutput\"))\n\n;; Complete operation definition\n(smithy/sdk:define-operation get-object\n  :shape-name \"GetObject\"\n  :input get-object-request\n  :output get-object-output\n  :method \"GET\"\n  :uri \"/{Bucket}/{Key+}?x-id=GetObject\"\n  :errors '(no-such-key))\n```\n\n### Defining Services\n\n```lisp\n(smithy/sdk:define-service s3\n  :version \"2006-03-01\"\n  :operations '(get-object put-object delete-object list-buckets)\n  :traits\n  '((\"aws.api#service\"\n     (\"arnNamespace\" . \"s3\")\n     (\"endpointPrefix\" . \"s3\"))\n    (\"aws.protocols#restXml\"\n     (\"noErrorWrapping\" . t))))\n```\n\n## See Also\n\n- [Smithy Specification](https://smithy.io/)\n- [pira](https://github.com/fukamachi/pira) - Unofficial AWS SDK generated by smithy-lisp\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffukamachi%2Fsmithy-lisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffukamachi%2Fsmithy-lisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffukamachi%2Fsmithy-lisp/lists"}