# polyvalid
`polyvalid` is a Rust library for validating package names, usernames, namespace names, and app names. The library provides a single source of truth for validating the names with the following rules:
1. Start with an alphabet character
2. Have one or more alphanumeric characters, `_` or `-`
3. End with an alphanumeric character
Additionally, the library checks if the name contains `--` since it can break URL rules.
The library can be used from Python and JS through the provided bindings.
## Using the library
The library can be used from rust, python or javascript. The following describes how to use it from all three languages.
### Rust
```bash
cargo add polyvalid
```
```rust
use polyvalid;
let name: String = "polyvalid";
assert!(polyvalid::is_app_name_valid(name));
```
### Python
```bash
pip add polyvalid
```
```python
import polyvalid
name = "polyvalid"
polyvalid.is_app_name_valid(name) # returns True
```
### Javascript
```bash
npm i polyvalid
```
```js
import "polyvalid";
name = "polyvalid";
polyvalid.is_valid_name(name); // returns true
```
## Next steps
- [ ] Add CI to autopublish to wapm, pypi, npm
- [ ] Add tests for python and JS versions of the library
- [ ] Add wrapper around the python library (to improve usability)
## Contributing
Contributions are welcome! If you'd like to contribute to `polyvalid`, please follow these steps:
1. Fork the repo and create a new branch for your changes.
2. Make your changes, write tests, and ensure that the tests pass.
3. Submit a pull request to the `polyvalid` repo.
4. Wait for feedback or approval from the maintainers.