[][src]Crate ift

IFT (interface templates)

Template strings to extract the correct interface and IpAddr to bind to. Heavily inspired by https://github.com/hashicorp/go-sockaddr

What is it?

eval(docs) takes an interface template string. The template is a string that starts with a producer and is followed by filters and sorts each of which is pipe | delimited. eval returns a vector of IpAddr objects that can then be used as bindings

Usage

general

use ift::eval;
print!("{:?}", eval(r#"GetInterface "en0""#).unwrap());

actix

use actix_web::{
   server,
   App,
};
let mut s = server::new(|| { App::new() });
for ip in ift::eval("GetPrivateInterfaces").unwrap().into_iter() {
  s = s.bind((ip, 8080)).unwrap();
}

Example Templates

  • get private interfaces GetAllInterfaces | FilterFlags "up" | FilterForwardable | SortBy "default"
  • get private interfaces short GetPrivateInterfaces
  • get specific interface by name GetInterface "en0"
  • get only interfaces with ipv6 addresses GetAllInterfaces | FilterIPv6

Example Code

There are examples in the examples folder.

  • actix - bind multiple private interfaces

Modules

rfc

to get specific information about rfcs used by the templates

Enums

IfTError

Some errors that can come from the evaluation of the template

Functions

eval

Evaluate a interface template

evals

Just like eval. Returns the first IpAddr as an option. None if empty vector.