# HG changeset patch # User ellis # Date 1683340890 14400 # Node ID 8f59e2f1b8c45936dd9ec0bfb012ec6ac2d9e08d # Parent 04ac94b03a26da5e1811e279284e1de90dc64b5d stuff diff -r 04ac94b03a26 -r 8f59e2f1b8c4 Cargo.toml --- a/Cargo.toml Sun Apr 30 22:25:43 2023 -0400 +++ b/Cargo.toml Fri May 05 22:41:30 2023 -0400 @@ -1,5 +1,5 @@ [package] -name = "cl-demo-rs" +name = "demo_ffi" version = "0.1.0" edition = "2021" build = "build.rs" @@ -7,10 +7,10 @@ path = "lib.rs" crate-type = ["cdylib"] [workspace] -members = ["cfg","obj"] +members = ["obj","fig","proc_macros"] [dependencies] libc = "0.2" obj = {version = "0.1.0",path = "obj"} -cfg = {version = "0.1.0",path = "cfg"} +fig = {version = "0.1.0",path = "fig"} [build-dependencies] cbindgen = "0.20" \ No newline at end of file diff -r 04ac94b03a26 -r 8f59e2f1b8c4 cfg/Cargo.toml --- a/cfg/Cargo.toml Sun Apr 30 22:25:43 2023 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -[package] -name = "cfg" -version = "0.1.0" -edition = "2021" -[dependencies] -obj = {version = "0.1.0",path = "../obj"} -serde_dhall = "0.12.1" diff -r 04ac94b03a26 -r 8f59e2f1b8c4 cfg/src/lib.rs --- a/cfg/src/lib.rs Sun Apr 30 22:25:43 2023 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -//! cfg/src/lib.rs --- Configuration types - -#[cfg(test)] -mod tests; diff -r 04ac94b03a26 -r 8f59e2f1b8c4 cfg/src/tests.rs --- a/cfg/src/tests.rs Sun Apr 30 22:25:43 2023 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -//! cfg/src/tests --- unit tests -use crate::*; -#[test] -fn test_hello() { - println!("looks good chief"); -} diff -r 04ac94b03a26 -r 8f59e2f1b8c4 cl-demo.asd --- a/cl-demo.asd Sun Apr 30 22:25:43 2023 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -(asdf:defsystem "cl-demo" - :version "1.0.0" - :author "ellis " - :maintainer "ellis " - :description "" - :homepage "https://rwest.io/p/cl-demo" - :bug-tracker "https://gitlab.rwest.io/ellis/cl-demo/issues" - :source-control (:hg "https://gitlab.rwest.io/ellis/cl-demo") - :license "WTFPL" - :depends-on (:bordeaux-threads - #+(or ccl sbcl) - :clack - :caveman2 - :clog - :cl-rocksdb - :verbose - :alexandria - :cl-ppcre - :cffi - :clingon) - :serial T - :components ((:file "pkg") - (:file "tk") - (:file "db") - (:file "ui") - (:file "demo")) - ;; :in-order-to ((test-op (test-op "cl-demo/tests"))) - ;; :defsystem-depends-on (:deploy) - ;; :build-operation "deploy" - :build-pathname "cl-demo" - :entry-point "cl-demo:main") - -;; (asdf:defsystem "cl-demo:tests" - ;; :depends-on ("cl-demo" "fiveam") - ;; :components ((:file "tests")) - ;; :perform (test-op (o c) (symbol-call :fiveam '#:run! :cl-demo)) - ;; ) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 db.lisp --- a/db.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/db.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,2 +1,1 @@ -(in-package :cl-demo) - +(in-package :demo) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 demo.asd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demo.asd Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,38 @@ +(asdf:defsystem "demo" + :version "1.0.0" + :author "ellis " + :maintainer "ellis " + :description "" + :homepage "https://rwest.io/p/demo" + :bug-tracker "https://gitlab.rwest.io/ellis/demo/issues" + :source-control (:hg "https://gitlab.rwest.io/ellis/demo") + :license "WTFPL" + :depends-on (:bordeaux-threads + #+(or ccl sbcl) + :clack + :caveman2 + :clog + :cl-rocksdb + :verbose + :alexandria + :cl-ppcre + :cffi + :clingon) + :serial T + :components ((:file "pkg") + (:file "ffi") + (:file "tk") + (:file "db") + (:file "ui") + (:file "demo")) + ;; :in-order-to ((test-op (test-op "demo/tests"))) + ;; :defsystem-depends-on (:deploy) + ;; :build-operation "deploy" + :build-pathname "demo" + :entry-point "demo:main") + +;; (asdf:defsystem "cl-demo:tests" + ;; :depends-on ("cl-demo" "fiveam") + ;; :components ((:file "tests")) + ;; :perform (test-op (o c) (symbol-call :fiveam '#:run! :cl-demo)) + ;; ) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 demo.lisp --- a/demo.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/demo.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,5 +1,5 @@ ;; demo.lisp -(in-package :cl-demo) +(in-package :demo) (defparameter demo-path (merge-pathnames "cl-demo" (uiop:temporary-directory))) @@ -20,7 +20,7 @@ (defun cli-handler (cmd) "Handler for the `demo' command." (let ((app (cli:getopt cmd :app))) - (format t "running app: ~A!~%" app))) + (format t "running: ~A!~%" app))) (defun cli-cmd () "Our demo command." @@ -30,9 +30,9 @@ :version "1.0.0" :authors '("ellis ") :license "WTFPL" - :options (demo/opts) - :handler #'demo/handler)) + :options (cli-opts) + :handler #'cli-handler)) (defun main () "A demo of some common-lisp functionality." - (cli:run (demo/cmd))) + (cli:run (cli-cmd))) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 ffi.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ffi.lisp Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,8 @@ +(in-package :demo) + +(define-foreign-library demo_ffi + (:win32 (:default "./target/release/demo_ffi")) + (t (:default "./target/release/libdemo_ffi"))) + +(use-foreign-library demo_ffi) + diff -r 04ac94b03a26 -r 8f59e2f1b8c4 fig/Cargo.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/Cargo.toml Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,7 @@ +[package] +name = "fig" +version = "0.1.0" +edition = "2021" +[dependencies] +obj = {version = "0.1.0",path = "../obj"} +serde_dhall = "0.12.1" diff -r 04ac94b03a26 -r 8f59e2f1b8c4 fig/src/lib.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/src/lib.rs Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,3 @@ +//! fig/src/lib.rs --- Configuration types +#[cfg(test)] +mod tests; diff -r 04ac94b03a26 -r 8f59e2f1b8c4 fig/src/tests.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/src/tests.rs Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,6 @@ +//! cfg/src/tests --- unit tests +use crate::*; +#[test] +fn test_hello() { + println!("looks good chief"); +} diff -r 04ac94b03a26 -r 8f59e2f1b8c4 lib.rs --- a/lib.rs Sun Apr 30 22:25:43 2023 -0400 +++ b/lib.rs Fri May 05 22:41:30 2023 -0400 @@ -1,1 +1,3 @@ -//! cl-demo-rs +//! demo_ffi +pub use obj::Service; +pub use fig; diff -r 04ac94b03a26 -r 8f59e2f1b8c4 makefile --- a/makefile Sun Apr 30 22:25:43 2023 -0400 +++ b/makefile Fri May 05 22:41:30 2023 -0400 @@ -1,5 +1,5 @@ L ?= sbcl -O ?= /tmp/cl-demo +O ?= /tmp/demo .PHONY:build $(O):;mkdir -p $@ clean:;rm -rf out *.fasl;cargo clean @@ -7,4 +7,5 @@ docs:;scripts/docs.ros test:;scripts/test.ros pack:;scripts/pack.ros +check:;scripts/check.ros ci:clean build docs test pack; diff -r 04ac94b03a26 -r 8f59e2f1b8c4 obj/Cargo.toml --- a/obj/Cargo.toml Sun Apr 30 22:25:43 2023 -0400 +++ b/obj/Cargo.toml Fri May 05 22:41:30 2023 -0400 @@ -8,9 +8,9 @@ serde_json = "1.0.68" serde = { version = "1.0.130", features = ["derive"] } chrono = { version = "0.4.19", features = ["serde"] } -mime = "0.3.16" +# mime = "0.3.16" regex = "1.5.4" -rusty_ulid = "0.11.0" +# rusty_ulid = "0.11.0" uuid = { version = "0.8", features = ["serde"] } [target.'cfg(target_arch = "wasm32")'.dependencies] uuid = { version = "0.8", features = ["wasm-bindgen"] } diff -r 04ac94b03a26 -r 8f59e2f1b8c4 obj/src/lib.rs --- a/obj/src/lib.rs Sun Apr 30 22:25:43 2023 -0400 +++ b/obj/src/lib.rs Fri May 05 22:41:30 2023 -0400 @@ -1,12 +1,17 @@ //! obj/src/lib.rs --- Objective type library +#![feature(associated_type_bounds)] mod err; -pub use err::{Error,Result}; +pub use err::{Error, Result}; +mod types; +pub use types::*; pub use ron; - +pub use bincode; +pub use serde_json; use ron::extensions::Extensions; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use std::io; +use std::collections::{HashMap, BTreeMap}; /// common trait for all config modules. This trait provides functions /// for de/serializing to/from RON, updating fields, and formatting. @@ -123,3 +128,7 @@ Ok(serde_json::de::from_slice(s.as_bytes())?) } } + +impl Objective for Vec {} +impl Objective for HashMap {} +impl Objective for BTreeMap {} diff -r 04ac94b03a26 -r 8f59e2f1b8c4 obj/src/types.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/obj/src/types.rs Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,23 @@ +//! obj/src/types.rs --- OBJ type descriptions used by our demo +use crate::{Error, Result, Objective, Serialize, Deserialize}; +/// APPLICATION TYPES +#[derive(Serialize, Deserialize)] +pub enum Service { + Nws, + Fin, + Pvp, +} + +impl Objective for Service {} + +#[derive(Serialize, Deserialize)] +pub struct Complex { + data: X, + state: Vec, +} + +impl Objective for Complex {} + +pub fn generate_complex() -> Result> { + Ok(Complex::::from_json_str("hi")?) +} diff -r 04ac94b03a26 -r 8f59e2f1b8c4 pkg.lisp --- a/pkg.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/pkg.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,11 +1,10 @@ #| -cl-demo +demo -> (cl-demo:main) +> (demo:main) |# - -(defpackage #:cl-demo - (:use #:cl) +(defpackage #:demo + (:use #:cl #:cffi) (:local-nicknames (#:rdb #:cl-rocksdb) (#:v #:org.shirakumo.verbose) @@ -32,4 +31,6 @@ ;; tk.lisp (:export #:random-id - #:scan-dir)) + #:scan-dir) + ;; ffi.lisp + ) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 proc_macros/Cargo.toml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/proc_macros/Cargo.toml Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,12 @@ +[package] +name = "proc_macros" +version = "0.1.0" +edition = "2021" + +[lib] +proc-macro = true + +[dependencies] +quote = "1.0" +proc-macro2 = "1.0" +syn = "1.0" \ No newline at end of file diff -r 04ac94b03a26 -r 8f59e2f1b8c4 proc_macros/src/derive.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/proc_macros/src/derive.rs Fri May 05 22:41:30 2023 -0400 @@ -0,0 +1,5 @@ +mod derive; +use proc_macro::TokenStream; +pub fn derive_static_type(input: TokenStream) -> TokenStream { + derive::derive_static_type(input) +} diff -r 04ac94b03a26 -r 8f59e2f1b8c4 proc_macros/src/lib.rs diff -r 04ac94b03a26 -r 8f59e2f1b8c4 readme.org --- a/readme.org Sun Apr 30 22:25:43 2023 -0400 +++ b/readme.org Fri May 05 22:41:30 2023 -0400 @@ -1,8 +1,10 @@ #+TITTLE: cl-demo This is a demo software suite which showcases the power of Common Lisp and Rust. - * Make * Run * Play * Config +* COMMENT tasks +** TODO proc_macros +** TODO ros scripts diff -r 04ac94b03a26 -r 8f59e2f1b8c4 scripts/compile.ros --- a/scripts/compile.ros Sun Apr 30 22:25:43 2023 -0400 +++ b/scripts/compile.ros Fri May 05 22:41:30 2023 -0400 @@ -6,9 +6,7 @@ (progn ;;init forms (in-package :cl-user) (ros:ensure-asdf) - (asdf:load-asd #P"~/dev/cl-demo/cl-demo.asd") - (asdf:load-asd #P"~/quicklisp/local-projects/cl-rocksdb/cl-rocksdb.asd") - #+quicklisp(ql:quickload '(cl-demo) :silent t)) + #+quicklisp(ql:quickload '(demo) :silent t)) ;; TODO 2023-02-25: opts (system, config, user input) (defun main (&rest argv) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 scripts/demo.ros --- a/scripts/demo.ros Sun Apr 30 22:25:43 2023 -0400 +++ b/scripts/demo.ros Fri May 05 22:41:30 2023 -0400 @@ -5,8 +5,8 @@ |# (progn ;;init forms (ros:ensure-asdf) - #+quicklisp(ql:quickload '() :silent t)) + #+quicklisp(ql:quickload '(demo) :silent t)) (defun main (&rest argv) (declare (ignorable argv)) - (format t "hello world")) \ No newline at end of file + (format t "hello world")) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 scripts/docs.ros diff -r 04ac94b03a26 -r 8f59e2f1b8c4 scripts/test.ros diff -r 04ac94b03a26 -r 8f59e2f1b8c4 tests.lisp --- a/tests.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/tests.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,1 +1,1 @@ -(in-package :cl-demo) +(in-package :demo) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 tk.lisp --- a/tk.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/tk.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,4 +1,4 @@ -(in-package #:cl-demo) +(in-package #:demo) (defun random-id () (format NIL "~8,'0x-~8,'0x" (random #xFFFFFFFF) (get-universal-time))) diff -r 04ac94b03a26 -r 8f59e2f1b8c4 ui.lisp --- a/ui.lisp Sun Apr 30 22:25:43 2023 -0400 +++ b/ui.lisp Fri May 05 22:41:30 2023 -0400 @@ -1,4 +1,4 @@ -(in-package :cl-demo) +(in-package :demo) (defun on-new-window (body) "Handle new window event."