AI prompts
base on Designed for rapid iteration in IC Canister development projects. # IC_Utils
Designed for rapid iteration in IC Canister development projects.
## Summary
`IcContext` provides a context for invoking IC canister objects, facilitating storage and retrieval of object data within the canister.
`NatUtils` enables rapid generation and conversion of Nat types for natural numbers.
`Guard` supports locking operations on canisters to prevent data reentry anomalies.
`Throws` utility class handles exceptions, triggering panic for exceptional instances and returning data results for normal cases.
## Details
### IcContext
IcContext provides the context for ic canister object invocation, which is used to store the object type and facilitate the user to store and call the object data in canister.
```rust
let tll = context::get_mut::<VecDeque<SwapOrder>>();
```
In this example, an empty VecDeque of type VecDeque<SwapOrder> is returned if no object of type VecDeque<SwapOrder> exists in the context, or a stored object if one exists. The returned object is actually a mutable reference, and any user edits to the reference will modify the object.
### NatUtils
`nat_utils` is used for rapidly generating Nat types as natural numbers and performing mutual conversions between different types.
```rust
fstr_to_nat("3.1231313",1_000_000_000_000_000_000f64);
```
In this example, we are converting numeric characters of type 'str' into Nat numbers with 18-digit precision.
### Guard
The tool supports locking operations requested to canister to prevent anomalies caused by data reentry.
```rust
//Add Exclusion Lock
let guard = CallerGuard::new(id().clone());
if guard.is_err() {
panic!("{}",guard.err().unwrap());
}
```
### Throws
The throws utility class is used to handle exceptions when called, throwing panic when the received instance is an exception and returning data results when normal.
```rust
//Exception handling when creating a canister
let (cid, ) = throw(create_canister(CreateCanisterArgument {
settings: Some(CanisterSettings {
controllers: Some(vec![id()]),
compute_allocation: None,
memory_allocation: None,
freezing_threshold: None,
})
}, 500000000000).await.map_err(|e| "Create Pool failed:".to_string() + &*e.1));
```
## Feature Milestones
Developers continue to enhance this toolchain to support a broader range of application scenarios and to accelerate development efficiency on the IC platform.
- [x] IcContext
- [x] NatUtils
- [x] Guard
- [x] Throws
- [x] LinkedHashMap:The LinkedHashMap is a custom data structure that combines the features of a hash map and a linked list. It maintains a hash map for fast key-value lookups and a linked list to preserve the order of insertion.
- [ ] MemoryStorage:A method for managing large objects.
- [ ] CommonCanister:A tool that integrates basic canister query interfaces such as cycles querying and memory querying services, serving as the foundational integration for any canister.
", Assign "at most 3 tags" to the expected json: {"id":"4565","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"