Skip to content

camerondavison/ift

Repository files navigation

Build Status Ift Version

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

developing

To regenerate the RFC code

make gen

To Update README

make update

To Release

You can use the cargo release command.

cargo release patch

License: MIT