Skip to content

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

License

Notifications You must be signed in to change notification settings

moonbit-community/ini

Repository files navigation

📝 ini: A MoonBit INI Parser

English | 简体中文

Build Status License codecov

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 moonbit-community/ini

🚀 Usage Guide for ini

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 ini is with the parse function:

///|
test {
  let config_str =
    #|[server]
    #|host=localhost
    #|port=3000
  let ini = @ini.parse(config_str)
  let host = ini.get(section="server", "host").unwrap()
  inspect(host, content="localhost")
}

⚙️ Configuration Options

ini offers configuration options when parsing:

///|
test {
  let content =
    #|[server]
    #|host=localhost
    #|port=3000
    #|[Server]
    #|host=remote

  // Case-sensitive parsing

  let ini = @ini.parse(content, is_case_sensitive=true)
  inspect(ini.get(section="server", "host").unwrap(), content="localhost")
  inspect(ini.get(section="Server", "host").unwrap(), content="remote")

  // Create an empty INI file object

  let ini = @ini.IniFile::new(is_case_sensitive=true)
  ignore(ini)
}

🔄 Value Access

After parsing, you can access values using various methods:

///|
test {
  let content =
    #|[server]
    #|host=localhost
    #|port=3000
    #|[feature]
    #|foo=true
  let ini = @ini.parse(content)
  let host = ini.get(section="server", "host")
  inspect(
    host,
    content=(
      #|Some("localhost")
    ),
  )
  let foo_enabled = ini.get_bool(section="feature", "foo")
  inspect(foo_enabled, content="Some(true)")
}

🛠️ Full Example

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

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

  // Access various values
  let host = ini.get(section="server", "host").unwrap()
  let port = ini.get(section="server", "port").unwrap_or("8080")
  let enabled = ini.get_bool(section="server", "enabled").unwrap()
  inspect(
    if enabled {
      "\{host}:\{port}"
    } else {
      ""
    },
    content="localhost:3000",
  )
}

📜 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! 🚀

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6