tree: 28cc0bf6a17c0af83cb18b5b232f9377afc84251 [path history] [tgz]
  1. .cargo/
  2. connections/
  3. crypto/
  4. presence/
  5. scripts/
  6. .dockerignore
  7. .gitignore
  8. Android.bp
  9. Cargo.lock
  10. Cargo.toml
  11. cargo2android.json
  12. deny.toml
  13. Dockerfile
  14. README.android
  15. README.md
nearby/README.md

Nearby Rust

Folder Structure

Root repo of the nearby Rust components, folder structure:

/connections nearby connections rust components

/crypto shared crypto components

/presence nearby presence rust components

Setup

Toolchain

If you don't already have a Rust toolchain, see rustup.rs.

Cargo

Install cargo-deny and cargo-fuzz:

cargo install --locked cargo-deny
cargo install cargo-fuzz

Setting up a Docker dev environment

Our project requires specific versions of system dependencies like OpenSSL and protobuf in order to build correctly. To make the setup of this easier you can use Docker to handle setting up the environment in a container.

First install Docker then build and run the image:

sudo docker build -t nearby_rust:v1.0 .
sudo docker run --rm -it nearby_rust:v1.0

Building the image creates a snapshot of the environment that has all of the system dependencies needed to start building and running all of the artifacts in the codebase.

Running the image runs check-everything.sh to verify all of the targets can successfully build and all of the tests pass in your new container environment.

To open a bash shell from the container environment:

sudo docker run -it nearby_rust:v1.0 bash

You can also setup VSCode to develop in a Docker container on a remote host that way you can make code changes and test them in the same environment without having to re-build the image.

Installing addlicense Tool

This tool helps lint the project for the correct header files being present and is run in check_everything.sh

install go:

brew install go

Then install the addlicense tool to $HOME/go/bin:

go install github.com/google/addlicense@latest

Optionally, if you prefer to avoid Go's default bin dir that holds build output for all go projects, specify the GOPATH env var to be the directory to install to, e.g. ~/local/addlicense:

GOPATH=~/local/addlicense go install github.com/google/addlicense@latest

This will put the binary at ~/local/addlicense/bin/addlicense instead of ~/go/bin/addlicense.

Verify that it works:

$HOME/go/bin/addlicense -h

Then to auto generate the headers run:

$HOME/go/bin/addlicense -c "Google LLC" -l apache .

For more detailed commands see: https://github.com/google/addlicense

Common tasks

Check everything:

./scripts/check-everything.sh

Build everything:

cargo build --workspace --all-targets

Run tests:

cargo test --workspace

Generate Docs:

cargo doc --no-deps --workspace --open

Run linter on dependencies as configured in deny.toml
This will make sure all of our dependencies are using valid licenses and check for known existing security vulnerabilities, bugs and deprecated versions

cargo deny --workspace check

Update dependencies in Cargo.lock to their latest in the currently specified version ranges (i.e. transitive deps):

cargo update

Check for outdated dependencies with cargo-outdated:

cargo outdated

Benchmarks

Benchmarks are in benches, and use Criterion .

cargo bench --workspace