https://github.com/younisshah/nazar
A Tile38 client in rust!
https://github.com/younisshah/nazar
redis tile38
Last synced: about 1 month ago
JSON representation
A Tile38 client in rust!
- Host: GitHub
- URL: https://github.com/younisshah/nazar
- Owner: younisshah
- Created: 2017-07-19T10:04:12.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-09T11:34:25.000Z (almost 8 years ago)
- Last Synced: 2025-03-26T09:12:32.638Z (about 2 months ago)
- Topics: redis, tile38
- Language: Rust
- Size: 18.6 KB
- Stars: 15
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Nazar
[](https://crates.io/crates/nazar)
[Tile38](http://tile38.com) is an open source (MIT licensed), in-memory geolocation data store, spatial index,
and realtime geofence. It supports a variety of object types including lat/lon points, bounding boxes, XYZ tiles,
Geohashes, and GeoJSON.**nazar** is a Tile38 client in rust!
The API is a bit sane now albeit still weird and unstable.
**API will change a lot**
### Install
In your `Cargo.toml` file add under `[dependencies]` section
```ini
[dependencies]
nazar = "1.0.7"
```### Usage
1) `SET` command
```rust
use self::nazar::t38::Types::{String, Float};
let n = nazar::t38::Client::from("redis://127.0.0.1:9851");match n.execute("SET", vec![String("my"), String("home"), String("POINT"), Float(23.12), Float(45.343)]) {
Ok(s) => println!("{}", s),
Err(e) => panic!(e)
}```
2) `GET` command
```rust
use self::nazar::t38::Types::{String};
let n = nazar::t38::Client::from("redis://127.0.0.1:9851");match n.execute("GET", vec![String("my"), String("home")]) {
Ok(s) => println!("{}", s),
Err(e) => panic!(e)
}
```3) New API to execute T38 command - `cmd`, `arg` and `execute_with_args`.
This is a high-level API to execute Tile38 commands!```rust
let mut n = nazar::t38::Client::from("redis://127.0.0.1:9851");
n.cmd("SET").arg("drivers").arg("qwerty").arg("POINT").arg("23.54").arg("32.74");
match n.execute_with_args() {
Ok(r) => println!("Result {}", r),
Err(e) => panic!(e),
};
```4) `PING` to check if the server is live or dead.
```rust
use nazar::t38::{Client};
let is_live = Client::ping("redis://127.0.0.1:9851");
```## Geofence features
To open a fence **only**, it is advisable to use `new` associated method like this:
```rust
let n = nazar::t38::Client::new();
```Then use `n` to open a geofence like this:
1) Open a static `FENCE` using `open_fence`:
```rust
let work = |msg| {
println!("FENCE updates {:?}", msg);
};
n.open_fence("ws://127.0.0.1:9851", "my_fleet", "12.12", "33.22", "6000", work);
```2) Open a static geofence with GeoJSON object type. `open_fence_within`
```rust
let work = |msg| {
println!("FENCE updates {:?}", msg);
};
n.open_fence_within("ws://localhost:9851", "my_fleet", "qwerty123", vec![vec![12.32, 23.4], vec![22.32, 33.4], vec![42.32, 23.5], vec![12.32, 23.4]], work)
```3) Open a static `FENCE` using `open_fence` (use this when to want to communicate with the server as well):
```rust
fn action (out: &nazar::t38::NazarSender, msg: String) {
out.send("OK").unwrap();
println!("{}", msg);
// do stuff with msg
}//.....
n.open_fence2("ws://127.0.0.1:9851", "my_fleet", "12.12", "33.22", "6000", action);
```4) Open a static geofence with GeoJSON object type. `open_fence_within` (use this when you want to communicate with the server as well):
```rust
fn action (out: &nazar::t38::NazarSender, msg: String) {
out.send("OK").unwrap();
println!("{}", msg);
// do stuff with msg
}//.....
n.open_fence_within2("ws://localhost:9851", "my_fleet", "qwerty123", vec![vec![12.32, 23.4], vec![22.32, 33.4], vec![42.32, 23.5], vec![12.32, 23.4]], action);
```5) Open a static geofence (circular) using `open_fence_and_send` (use this when you want to send updates to the client who opened the fence)
```rust
n.open_fence_and_send("ws://127.0.0.1:9851", "my_fleet", "12.12", "33.22", "6000", client); // client is a NazarSender
```6) Open a static geofence (polygonal) using `open_fence_within_and_send` (use this when you want to send updates to the client who opened the fence)
```rust
n.open_fence_within_and_send("ws://localhost:9851", "my_fleet", "qwerty123", vec![vec![12.32, 23.4], vec![22.32, 33.4], vec![42.32, 23.5], vec![12.32, 23.4]], client); // client is a NazarSender
```#### A work in progress
TODO
1) Make sane API.
1) Documentation
2) Roaming `FENCE`