mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
2.4 KiB
2.4 KiB
Yoda - Browser for Gemini protocol
Rust / GTK 4 implementation
Important
Project in development!
Install
Stable
cargo install Yoda
Repository
git clone https://github.com/YGGverse/Yoda.git
cd Yoda
git checkout Rust-GTK4
cargo run
Development
Guide and protocol draft
browser
Filesystem
- Use modern path pattern
- One module implements one GTK widget, it may include additional helper files in same location (like template, CSS or DB API)
- For children widget - create children module, located according to hierarchy
Codebase
- The codebase must be as minimal as possible, separate:
- different tasks
- massive structures
- structures with implementation
- Every module must:
- encapsulate it members: compose childs and stay composable for parents
- access 1 level of childs, never parents (e.g. through
super) - implement only one public
structper file (same as one file for one class)- implementable
structis public, where it members - private
- implementable
- contain main
structimplementation:- at least one constructor that must:
- return unwrapped, non activated (todo) new
Selfobject - grant ownership for new
Selfobject created
- return unwrapped, non activated (todo) new
- public
activateaction (todo) - public link getter for privately constructed widget
- at least one constructor that must:
- Public API oriented to simple (
integer,boolean), standard (std::*) or system-wide (gio,glib, etc) data types usage to reduce internal dependencies from app implementation
GTK
- Operate with action objects instead of names like
win.action. This allows to follow encapsulation, by the our goal, module must know nothing about parent presets. For example, define some action in parent, then delegate object created as construction argument
Contribution
- before commit, make sure:
- new branch created for every new PR
git checkout -b 'contribution-name' - new code follows common rustfmt style
cargo fmt --check
- new branch created for every new PR