https://github.com/web-coke/super-struct
Rust
https://github.com/web-coke/super-struct
Last synced: 9 months ago
JSON representation
Rust
- Host: GitHub
- URL: https://github.com/web-coke/super-struct
- Owner: Web-Coke
- License: apache-2.0
- Created: 2024-06-30T06:10:14.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-02T04:12:15.000Z (about 2 years ago)
- Last Synced: 2025-01-15T11:36:36.165Z (over 1 year ago)
- Language: Rust
- Size: 35.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> # 💟💟💟小奕💟💟💟
# Docs
[![github][github]](https://github.com/Web-Coke/super-struct) [![crates-io][crates-io]](https://crates.io/crates/super-struct) [![docs-rs][docs-rs]](https://docs.rs/super-struct)
`super-struct` 旨在帮助开发者像 `Python` 的 `dict` 那样使用 `Rust` 的 `struct`
The `super-struct` is designed to help developers use the `struct` of `Rust` in the same way that `dict` of `Python`
目前这个库的大部分功能已经实现
Most of the functionality of this library has already been implemented
还有一部分功能正在积极开发中
There are also some features that are under active development
---
* [X] 获取 `struct` 中的字段名(keys)
* [X] 获取 `struct` 中的值
* [X] 根据 `struct` 的字段名称(key)获取值
* [X] 根据 `struct` 的字段名称(key)设置值
* [ ] 动态向 `struct` 中添加字段(key)(这个应该很难做到)
---
* [X] Get field names (keys) in `struct`
* [X] Get the value in `struct`
* [X] Gets the value based on the field name (key) of `struct`
* [X] Set the value based on the field name (key) of `struct`
* [ ] Dynamically add a field (key) to the `struct` (this should be hard to do)
---
如果你有更好的提议或需求欢迎提issue
If you have a better proposal or need, please feel free to raise an issue
# Example
在Cargo.toml中添加
Add in Cargo.toml
```toml
[dependencies]
super-struct = "*"
```
`struct` 里的类型都一致的情况下
`struct` is the case where the types are the same
```rust
use super_struct::*;
#[derive(Debug, Rustdict)]
struct Test {
name: String,
country: String,
language: String,
}
fn main() {
let mut test = Test {
name: "WebChang".to_string(),
country: "China".to_string(),
language: "Mandarin".to_string(),
};
println!("{:?}", test.keys());
// ["name", "country", "language"]
for i in test.keys() {
test[i] = "Hello".to_string();
if i == "language" {
test[i] = "Rust".to_string()
}
}
println!("{:?}", test);
// Test { name: "Hello", country: "Hello", language: "Rust" }
test.set("country", "中国".to_string());
println!("{:?}", test.values());
// ["Hello", "中国", "Rust"]
test["country"] = test.get("language").clone();
println!("{:?}", test.values());
//["Hello", "Rust", "Rust"]
}
```
如果 `struct` 里的类型不一致则 `Self[key]` 的语法糖不可用
If the types in `struct` are inconsistent, the syntactic sugar for `Self[key]` is not available
```rust
use super_struct::*;
#[derive(Debug, Rustdict)]
struct Test {
name: String,
country: String,
language: String,
age: u8,
}
fn main() {
let mut test = Test {
name: "WebChang".to_string(),
country: "China".to_string(),
language: "Mandarin".to_string(),
age: 24u8,
};
println!("{:?}", test.keys());
// ["name", "country", "language", "age"]
println!("{:?}", test.values());
// [Any { .. }, Any { .. }, Any { .. }, Any { .. }]
for i in test.keys() {
test.set(i, &"Hello".to_string());
// 如果类型不一致则什么都不会发生
// If the types are inconsistent, nothing happens
// if i == &"age" {
// test.set(i, &25u8)
// }
}
println!("{:?}", test);
// Test { name: "Hello", country: "Hello", language: "Hello", age: 24 }
test.set("age", &25u8);
println!("{:?}", test);
// Test { name: "Hello", country: "Hello", language: "Hello", age: 25 }
println!(
"{:?}",
test.get("language").downcast_ref::().unwrap()
);
// "Hello"
}
```
# Changelog
## 0.1.0
* 初始版本
* Initial release
## 1.0.0 & 1.0.1
* 更正文档错误
* Correct document errors
## 1.0.2
* 添加对 `where` 子句的支持
* Adds support for the `where` clause
* 修改 `Self.keys(&self) -> &'static[&'static str]` 为 `Self::keys() -> Vec<&'static str>`
* Changed `Self.keys(&self) -> &'static[&'static str]` to `Self::keys() -> Vec<&'static str>`
* 详细请移步到 [Github](https://github.com/Web-Coke/super-struct)
* For more details, please move to [Github](https://github.com/Web-Coke/super-struct)
[github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
[crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust
[docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs