Sign in

    sw_ini

    High-performance INI parser for MoonBit with nested section support.

    ini
    parser
    moonbit
    configparser
    Download zip
    Author
    Version
    0.2.0
    License
    Apache-2.0
    Last updated
    last year
    Downloads
    44

    No dependencies

    #📝 sw-ini: A MoonBit INI Parser

    Build Status License codecov

    sw-ini is a high-performance INI parser for MoonBit applications. It provides a simple and efficient way to parse and access INI configuration files with a clean and intuitive API.

    🚀 Key Features

    • 🔍 INI Parsing – Parse INI files with comprehensive error handling
    • đŸ›Ąī¸ Type Safety – Strongly typed access to configuration values
    • 🔄 Case Sensitivity Options – Configurable case sensitivity for section and key names
    • đŸŽ¯ Simple API – Easy to use with intuitive method names
    • đŸ“Ļ Zero Dependencies – Pure MoonBit implementation with no external dependencies


    #đŸ“Ĩ Installation

    moon add ShellWen/sw_ini

    #🚀 Usage Guide for sw-ini

    sw-ini provides a straightforward way to parse and access INI configuration files in your MoonBit applications.


    #📝 What is an INI File?

    An INI file is a configuration file format that consists of sections and key-value pairs:

    config.ini

    [server] host=localhost port=3000 [database] url=mysql://user:pass@localhost/dbname max_connections=100


    #🔍 Basic Usage

    The simplest way to use sw-ini is with the parse function:

    fn main {
    let config_str = "[server]\nhost=localhost\nport=3000"
    let ini = @sw_ini.parse!(config_str)
    let host = ini.get(section="server", "host").unwrap()
    println("host=\{host}")
    }

    #âš™ī¸ Configuration Options

    sw-ini offers configuration options when parsing:

    // Case-sensitive parsing
    let ini = @sw_ini.parse!(content, is_case_sensitive=true)

    // Create an empty INI file object
    let ini = @sw_ini.IniFile::new(is_case_sensitive=true)


    #🔄 Value Access

    After parsing, you can access values using various methods:

    let ini = @sw_ini.parse!(content)

    // Get string value (with optional section)
    let host = ini.get(section="server", "host")

    // Get boolean value
    let enabled = ini.get_bool(section="feature", "enabled")

    // Get with default section (global)
    let global_value = ini.get("global_key")


    #âš ī¸ Error Handling

    sw-ini uses MoonBit's Result type for error handling:

    match @sw_ini.parse?(content) {
    Ok(ini) =>
    // Use the INI file
    println("Parsed successfully")
    Err(e) =>
    // Handle parse error
    println("Error parsing INI file")
    }


    #đŸ› ī¸ Full Example

    fn main {
    let content = #|[server]
    #|host=localhost
    #|port=3000
    #|enabled=true
    #|
    #|[database]
    #|url=mysql://localhost/db

    // Parse INI content
    let ini = @sw_ini.parse!(content)

    // Access various values
    let host = ini.get(section="server", "host").unwrap()
    let port = ini.get(section="server", "port").or("8080")
    let enabled = ini.get_bool(section="server", "enabled").unwrap()

    // Use values in your application
    if enabled {
    println("Server running at \{host}:\{port}")
    }
    }

    #📜 License

    This project is licensed under the Apache-2.0 License. See LICENSE for details.

    #đŸ“ĸ Contact & Support

    👋 If you like this project, give it a ⭐! Happy coding! 🚀

    IniFile

    type IniFile

    IniFile::get

    fn IniFile::get(self : IniFile, section~ : String = .., key : String) -> String?
    get is a alias for get_string

    IniFile::get_bool

    fn IniFile::get_bool(self : IniFile, section~ : String = .., key : String) -> Bool?

    IniFile::get_string

    fn IniFile::get_string(self : IniFile, section~ : String = .., key : String) -> String?

    IniFile::new

    fn IniFile::new(is_case_sensitive~ : Bool = ..) -> IniFile

    IniFile::set

    fn IniFile::set(self : IniFile, section~ : String = .., key : String, value : String) -> Unit

    IniFile::to_string

    fn IniFile::to_string(self : IniFile) -> String
    Converts the IniFile to a standard INI format string

    IniParseError

    pub enum IniParseError {
    UnexpectedEqualSign(Int, Int)
    EmptySection(Int, Int)
    UnclosedSection(Int, Int)
    ValueWithoutSection(Int, Int)
    QuoteMismatch(Int, Int)
    QuoteNotClosed(Int, Int)
    }

    IniParseState

    type IniParseState

    IniParseState::finish

    IniParseState::new

    fn IniParseState::new(is_case_sensitive~ : Bool = ..) -> IniParseState

    IniParseState::parse

    fn IniParseState::parse(self : IniParseState, chunk : String) -> IniParseState!IniParseError

    parse

    fn parse(str : String, is_case_sensitive~ : Bool = ..) -> IniFile!IniParseError

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    Š 2026 mooncakes.io