tnr

Crates.iotnr
lib.rstnr
version0.2.0
created_at2025-07-08 08:29:43.269283+00
updated_at2025-07-08 08:41:16.419508+00
descriptionA macOS notification library and CLI tool using terminal-notifier
homepagehttps://github.com/naoto0822/tnr
repositoryhttps://github.com/naoto0822/tnr
max_upload_size
id1742198
size22,150
naoto yamaguchi (naoto0822)

documentation

https://docs.rs/tnr

README

tnr

A macOS notification library and CLI tool that provides a simple interface to send notifications using terminal-notifier.

Features

  • đŸŽ¯ Simple and intuitive API
  • 🔧 Both CLI tool and Rust library
  • ✨ Support for different notification types (error, warning, info, success)
  • 🔗 Clickable notifications with URL support
  • đŸŽĩ Custom sounds for different notification types
  • đŸ“Ļ Zero external dependencies (except terminal-notifier)

Prerequisites

This tool requires terminal-notifier to be installed on your macOS system:

brew install terminal-notifier

System Configuration

To use terminal-notifier, you need to configure macOS notification settings:

  1. Open System Preferences → Notifications
  2. Find and select terminal-notifier
  3. Check "Allow Notifications"
  4. Set notification style (Banner/Alert) as needed

Installation

As a CLI tool

cargo install tnr

As a library dependency

Add this to your Cargo.toml:

[dependencies]
tnr = "0.1.0"

CLI Usage

# Basic notification
tnr --message "Hello, World!"

# Notification with title and type
tnr --title "Build Status" --message "Build completed successfully" --type success

# Notification with clickable URL
tnr --message "Check the results" --url "https://github.com"

# Error notification
tnr --message "Something went wrong" --type error

CLI Options

  • --title <TITLE>: Notification title
  • --message <MESSAGE>: Notification message (required)
  • --type <TYPE>: Notification type (error, warning, info, success)
  • --url <URL>: URL to open when notification is clicked

Library Usage

use tnr::{Notify, Type};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Basic notification
    Notify::new("Hello from Rust!")
        .send()?;
    
    // Notification with all options
    Notify::new("Task completed successfully!")
        .with_title("Build Status")
        .with_type(Type::Success)
        .with_url("https://github.com")
        .send()?;
    
    // Error notification
    Notify::new("Something went wrong")
        .with_type(Type::Error)
        .send()?;
    
    Ok(())
}

Available Notification Types

  • Type::Error - ❌ with "Sosumi" sound
  • Type::Warning - âš ī¸ with "Funk" sound
  • Type::Info - â„šī¸ with "Glass" sound
  • Type::Success - ✅ with "Hero" sound

API Documentation

Notify

The main struct for creating and sending notifications.

Methods

  • new(message: impl Into<String>) -> Self - Create a new notification with a message
  • with_title(self, title: impl Into<String>) -> Self - Set the notification title
  • with_type(self, notification_type: Type) -> Self - Set the notification type
  • with_url(self, url: impl Into<String>) -> Self - Set a URL to open when clicked
  • send(&self) -> Result<(), TnrError> - Send the notification

Type

Enum representing different types of notifications with associated emojis and sounds.

Error Handling

The library uses TnrError enum for error handling:

  • TnrError::ExecutionFailed - terminal-notifier execution failed
  • TnrError::CommandNotFound - terminal-notifier not found on system

Examples

See the examples/ directory for more usage examples.

License

MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Commit count: 0

cargo fmt