rust_less/lib.rs
1//! # Rust-Less
2//!
3//! `rust_less` 是一个用 Rust 编写的 LESS 到 CSS 解析器和转换器库。
4//! 它能够将 LESS 语法解析为抽象语法树(AST),并将其转换为有效的 CSS。
5//!
6//! ## 功能特性
7//!
8//! - LESS 解析
9//! - CSS 转换
10//! - 支持嵌套选择器
11//! - 支持变量
12//! - 支持媒体查询
13
14#[macro_use]
15extern crate pest_derive;
16
17pub mod parser;
18pub mod selects;
19pub mod utils;
20mod test;
21
22// 重新导出常用的组件,使API更加清晰
23pub use parser::LessParser;
24pub use parser::Rule;
25pub use selects::ToCss;
26// 注意:现在 select 和 media_query 模块已经是公共的,我们可以直接导出它们的类型
27pub use selects::Select;
28pub use selects::MediaQuery;
29pub use selects::Variable;
30pub use selects::Selects;
31
32/// 解析LESS字符串并将其转换为CSS
33///
34/// # 参数
35///
36/// * `source` - 要解析的LESS源代码字符串
37///
38/// # 返回值
39///
40/// 返回转换后的CSS字符串,如果解析失败则返回错误
41///
42/// # 示例
43///
44/// ```
45/// use rust_less::parse_less;
46///
47/// let less = ".selector { @width: 100px; width: @width; }";
48/// match parse_less(less) {
49/// Ok(css) => println!("Generated CSS: {}", css),
50/// Err(e) => eprintln!("Error: {}", e),
51/// }
52/// ```
53pub fn parse_less(source: &str) -> Result<String, String> {
54 let ast = parser::parse(source).map_err(|e| e.to_string())?;
55 Ok(ast.to_css())
56}
57
58/// 从文件中解析LESS并转换为CSS
59///
60/// # 参数
61///
62/// * `file_path` - LESS文件的路径
63///
64/// # 返回值
65///
66/// 返回转换后的CSS字符串,如果解析失败则返回错误
67///
68/// # 示例
69///
70/// ```
71/// use rust_less::parse_less_file;
72///
73/// match parse_less_file("path/to/style.less") {
74/// Ok(css) => println!("Generated CSS: {}", css),
75/// Err(e) => eprintln!("Error: {}", e),
76/// }
77/// ```
78pub fn parse_less_file(file_path: &str) -> Result<String, String> {
79 use std::fs;
80 let source = fs::read_to_string(file_path)
81 .map_err(|e| format!("Failed to read file: {}", e))?;
82
83 parse_less(&source)
84}