3个版本 (有重大变化)
0.3.0 | 2022年3月4日 |
---|---|
0.2.0 | 2021年10月2日 |
0.0.0 | 2021年8月6日 |
#2 in #modules
1MB
23K SLoC
lewp-rs
这是 lewp
包的实际源代码。有关框架信息,请参阅仓库根目录,或访问文档页面。
lib.rs
:
告别网页模板地狱。在Rust源代码中生成技术优化且始终有效的HTML5网站。
⚠ 此包目前正在发展。API更改可能随时发生,直到v1.0.0版本
提供解决方案
当使用lewp时,您在网页开发中可以得到以下好处
- 代码库中不再有模板地狱
- 网站中不再有空白字符错误
- 技术优化,始终有效,已压缩的HTML5代码
- 基于模块的开发,真正隔离
- 在Rust中完全构建DOM
示例:Hello world!
use {
lewp::{
config::{ModuleConfig, PageConfig},
html::{
api::{h1, text},
Nodes,
},
Module, Modules, RuntimeInformation,
Page,
Charset,
LanguageTag,
LewpError,
},
std::rc::Rc,
};
// This is one of your modules the webpage is build with.
struct HelloWorld {
config: ModuleConfig,
head_tags: Nodes,
data: String,
}
impl HelloWorld {
pub fn new() -> Self {
Self {
config: ModuleConfig::new(),
head_tags: vec![],
data: String::from("hello-world"),
}
}
}
// The [Module] trait is required for [lewp] to know it is a module. :-)
impl Module for HelloWorld {
fn head_tags(&self) -> &Nodes {
&self.head_tags
}
fn id(&self) -> &str {
"hello-world"
}
fn config(&self) -> &ModuleConfig {
&self.config
}
fn run(
&mut self,
_runtime_info: Rc<RuntimeInformation>,
) -> Result<(), LewpError> {
Ok(())
}
fn view(&self) -> Nodes {
vec![h1(vec![text(&self.data)])]
}
}
// This struct defines the actual page. The containing members are
// required because they define the base on which [lewp] is working on.
struct HelloWorldPage {
modules: Modules,
config: PageConfig,
}
impl HelloWorldPage {
/// Creates a new page.
pub fn new(config: PageConfig) -> Self {
Self {
modules: vec![],
config,
}
}
}
impl Page for HelloWorldPage {
fn modules(&self) -> &Modules {
&self.modules
}
fn modules_mut(&mut self) -> &mut Modules {
&mut self.modules
}
fn title(&self) -> &str {
"Hello World from lewp!"
}
fn description(&self) -> &str {
"My first page using lewp!"
}
fn language(&self) -> LanguageTag {
LanguageTag::parse("de-DE").unwrap()
}
fn charset(&self) -> Charset {
Charset::Utf8
}
fn config(&self) -> &PageConfig {
&self.config
}
fn run(&mut self) {
self.add_module(HelloWorld::new().into_module_ptr());
}
}
fn main() {
let mut page = HelloWorldPage::new(PageConfig::new());
println!("{}", page.build());
}
依赖
~5–13MB
~151K SLoC