# Josa > Idiomatic [josa](https://en.wikipedia.org/wiki/Korean_postpositions) selector. ![crates.io version][version] ![crates.io license][license] ![crates.io download][download] Josa is a [Rust] library to select appropriate josas for korean language. ## Overview ### `push_josa` method Josa is an [extension trait] implemented for [`String`] type. Its API works just like [`push_str`] method on [`String`]. ```rust use josa::JosaExt; use josa::Josa::{EunNeun, IGa}; let mut user = "유진".to_owned(); let mut mackerel = "고등어".to_owned(); user.push_josa(EunNeun); mackerel.push_josa(IGa); let sentence = format!("{} {} 먹고싶다", user, mackerel); assert_eq!(sentence, "유진은 고등어가 먹고싶다"); ``` > :warning: Like [`push_str`] does, `push_josa` expects [`String`], not [`str`], as its argument. ### `+`, `+=` operator You can use `+`, `+=` operator to append josa. ```rust use josa::Josa::{EunNeun, IGa}; let user = "유진".to_owned(); let mackerel = "고등어".to_owned(); let sentence = format!("{} {} 먹고싶다", user + EunNeun, mackerel + IGa); assert_eq!(sentence, "유진은 고등어가 먹고싶다"); ``` ### `select` method In case you want to append a josa to formatted text such as `고양이`, you can use `select` method. ```rust use josa::select; use josa::Josa::IGa; let cat = "고양이"; let josa = select(cat, IGa).unwrap(); let cat = format!(r#"{}{}"#, cat, josa); assert_eq!(cat, r#"고양이가"#); ``` ## Usage Add `josa` as a dependency in your `Cargo.toml`. ```toml [dependencies] josa = "0.1.2" ``` Now you can use josa crate. ```rust use josa::*; // Use here.. ``` ## Documentation See [docs.rs][documentation] ## Roadmap ### `select` macro As soon as [hygiene 2.0 (#54727)][hygiene] arrives stable, we will add support for following macro: ```rust select!("{}{은} {}{가} 먹고싶다", user, mackerel); ``` which is terser than current syntax: ### Hangul enum variants As soon as [non-ASCII identifiers (#55467)][ident] arrives stable, we will change the names of josas to Hangul: ```rust format!("{} {} 먹고싶다", user + 은는, mackerel + 이가); ``` ## License Distributed under the MIT license. [version]: https://img.shields.io/crates/v/josa [license]: https://img.shields.io/crates/l/josa [download]: https://img.shields.io/crates/d/josa [Rust]: https://rust-lang.org [extension trait]: https://github.com/rust-lang/rfcs/blob/master/text/0445-extension-trait-conventions.md [`String`]: https://doc.rust-lang.org/std/string/struct.String.html [`str`]: https://doc.rust-lang.org/std/primitive.str.html [`push_str`]: https://doc.rust-lang.org/std/string/struct.String.html#method.push_str [documentation]: https://docs.rs/josa [hygiene]: https://github.com/rust-lang/rust/issues/54727 [ident]: https://github.com/rust-lang/rust/issues/55467