sof 0.17.1

Solana Observer Framework for low-latency shred ingestion and plugin-driven transaction observation
Documentation
use super::*;
use thiserror::Error;

const DEFAULT_BIND_ADDR: &str = "0.0.0.0:8001";

#[derive(Debug, Error)]
pub(super) enum BindAddressError {
    #[error("failed to parse default bind address `{value}`: {source}")]
    DefaultAddress {
        value: &'static str,
        source: std::net::AddrParseError,
    },
    #[error("invalid SOF_BIND address `{value}`: {source}")]
    InvalidAddress {
        value: String,
        source: std::net::AddrParseError,
    },
}

pub(super) fn read_bind_addr() -> Result<SocketAddr, BindAddressError> {
    read_env_var("SOF_BIND").map_or_else(
        || {
            SocketAddr::from_str(DEFAULT_BIND_ADDR).map_err(|source| {
                BindAddressError::DefaultAddress {
                    value: DEFAULT_BIND_ADDR,
                    source,
                }
            })
        },
        |value| {
            SocketAddr::from_str(&value)
                .map_err(|source| BindAddressError::InvalidAddress { value, source })
        },
    )
}