libtun 0.1.0

a cross-platform(macosx, linux) tunnel library
Documentation
pub use snafu::{ensure, Backtrace, ErrorCompat, ResultExt, Snafu};
use std::io;
use crate::Packet;

#[derive(Debug, Snafu)]
#[snafu(visibility = "pub")]
pub enum TunError {
  #[snafu(display("fail to create tunnel: {}", source))]
  CreateTun { source: io::Error },
  #[snafu(display("execute shell command \"{}\" fail: {}", cmd, source))]
  RunShellError { source: io::Error, cmd: String },
  #[snafu(display("execute shell command:\n\t{}\nfail:\n\t{}", cmd, result))]
  ShellResultError {
    result: String,
    cmd: String,
    backtrace: Backtrace,
  },
  #[snafu(display("read error: {}", source))]
  ReadError { source: io::Error },
  #[snafu(display("write error: {}", source))]
  WriteError { source: io::Error },
  #[snafu(display("parse addr to ipNet fail: {}", source))]
  ParseAddrFail { source: ipnet::AddrParseError },
  #[snafu(display("write error: {}", source))]
  PktWriteError {
    source: async_channel::SendError<Packet>,
  },}

pub type Result<T, E = TunError> = std::result::Result<T, E>;