mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
2.3 KiB
2.3 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
struct(same as one file for one class)- implementable
structis public, where members - private
- implementable
- contain main
structimplementation:- at least one constructor that must return:
- unwrapped main
Selfstructure - granted ownership for new object created
- unwrapped main
- public link getter for privately constructed widget
- at least one constructor that must return:
- 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, because by the goal, module must know nothing about parent presets - for example, define some action in parent, then delegate object created as 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