osynic_serializer 0.1.3

A osu beatmapsets serializer lib & CLI application based on osynic_osudb
Documentation
# OsynicSerializer CLI - Interactive Mode Demo


## Build & Installation Status ✅


The CLI has been successfully upgraded with interactive mode support!

### Build Information

- **Compilation Status**: ✅ Success (Release build)
- **Binary Location**: `target/release/osynic-sl.exe`
- **Size**: ~1.4 MB (optimized release build)
- **Dependencies Added**: `inquire v0.7` for interactive prompts

## What's New


### Interactive Mode Features

The CLI now provides a smooth interactive experience similar to **Vite**:

1. **📋 JSON Type Selection**
   - Prompts user to choose between `songs` or `sets` format
   - Displays with emoji indicators
   - Default: `songs`

2. **🔧 Algorithm Selection**
   - Choose between:
     - `osudb` (Database - Recommended) - Fast and accurate
     - `folder` (Direct scan) - Scans Songs directory
   - Default: `osudb`

3. **📁 osu! Path Detection**
   - Auto-detects osu! installation
   - Shows detected path and asks for confirmation
   - If not found or declined, allows manual input
   - Smart path handling with validation

4. **📁 Output Directory**
   - Prompts for output directory path
   - Default: `./output`
   - Creates directory structure automatically

## Usage Examples


### Mode 1: Pure Interactive Mode

```bash
# Just run the command - it will guide you through everything

osynic-sl -t songs

# Or with just the JSON type

osynic-sl

# The CLI will prompt for:

# 1. JSON type (if not provided)

# 2. Algorithm selection

# 3. osu! path (with auto-detect)

# 4. Output directory

```

### Mode 2: Guided with Some Parameters

```bash
# Provide some parameters, get prompted for the rest

osynic-sl -t sets
# Will ask for algorithm, path, and output


osynic-sl -a folder
# Will ask for JSON type, path, and output

```

### Mode 3: Full Command (Non-Interactive, Traditional)

```bash
# All parameters specified - no prompts

osynic-sl -t songs -a osudb -p "C:\Users\YourName\AppData\Local\osu!" -o "./output"
```

## UI/UX Improvements


### Visual Enhancements

- **Emoji Indicators** for better readability
  - 🎵 Title
  - 📋 JSON Type
  - 🔧 Algorithm
  - 📁 Path & Output
  - ✅ Success messages

- **Interactive Selection Menu**
  - Use ↑↓ arrow keys to navigate
  - Press Enter to select
  - Similar to Vite, create-react-app UX

- **Smart Defaults**
  - Auto-detects osu! path
  - Suggests confirmation for detected paths
  - Helpful prompts at each step

- **Better Output Feedback**
  - Shows detected paths
  - Displays file paths after save
  - Progress indicators

## Technical Details


### Code Changes


1. **Cargo.toml**
   - Added `inquire = "0.7"` for interactive prompts
   - Added to `cli` feature

2. **src/main.rs**
   - Refactored argument parsing
   - All parameters now optional
   - Interactive prompts for missing parameters
   - Better error handling
   - Improved output formatting

3. **src/functions/check.rs**
   - Fixed `whoami::username()` Result handling
   - Better path detection

### Function Flow

```
Start
  ↓
Check -t/--json-type → Prompt if missing
  ↓
Check -a/--algorithm → Prompt if missing
  ↓
Check -p/--path → Prompt with auto-detect
  ↓
Validate & Serialize
  ↓
Check -o/--output → Prompt if missing
  ↓
Output & Calculate Diff
  ↓
Save Results
  ↓
End ✅
```

## Testing


### Test Scenarios Completed


1. **Compilation Test**
   - Release build: Success
   - No compilation errors
   - Dependencies resolved correctly

2. **Parameter Parsing**
   - Optional arguments work correctly
   - Help message displays properly
   - All options available

3. **Integration Ready**
   - Full parameter specification works
   - Interactive prompts trigger when needed
   - Error handling functional

## Installation


### From Source

```bash
cd c:\Users\Chest\Documents\GitHub\self\osynic_serializer
cargo install --path .
```

### Using Pre-built Binary

```bash
./target/release/osynic-sl.exe -t songs
```

## Backward Compatibility


✅ **Fully Backward Compatible**
- All existing command-line scripts work unchanged
- Original parameter format preserved
- Non-interactive mode still works perfectly
- Just use full parameter specification to bypass prompts

## Examples


### Example 1: Interactive Complete Flow

```bash
$ osynic-sl
🎵 OsynicSerializer - Interactive Mode

📋 Select output JSON type:
❯ songs
  sets

Press ↑↓ to navigate, Enter to select
→ User selects "songs"

🔧 Select serialization algorithm:
❯ osudb (Database - Recommended)
  folder (Direct scan)

Press ↑↓ to navigate, Enter to select
→ User selects "osudb"

📁 Detected osu! installation at: C:\Users\Chest\AppData\Local\osu!
Use this path? (y/n)
→ User selects "yes"

📁 Enter output directory path: [./output]
→ User presses Enter to accept default

⏳ Processing...

✅ Total songs after diff: 2450
📄 Output file: ./output/songs_dm_250405125030.json
```

### Example 2: Hybrid (Some Params, Some Interactive)

```bash
$ osynic-sl -t sets -a folder
🎵 OsynicSerializer - Interactive Mode

📁 Detected osu! installation at: C:\Users\Chest\AppData\Local\osu!
Use this path? (y/n)
→ User selects "no"

📁 Enter osu! installation path: [C:\Games\osu!]
→ User enters custom path

📁 Enter output directory path: [./output]
→ User presses Enter

⏳ Processing...

✅ Total beatmapsets after diff: 1850
📄 Output file: ./output/sets_m_250405125045.json
```

## Summary


The `osynic-sl` CLI is now significantly more user-friendly with:
- ✅ Interactive mode (like Vite)
- ✅ Smart path detection
- ✅ Beautiful TUI prompts
- ✅ Backward compatible
- ✅ Professional UX/UI
- ✅ Full keyboard navigation

Users can now run simple commands and follow the interactive prompts just like popular CLI tools, while power users can still specify all parameters for scripting.