Skip to content

orhanbalci/emojic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

98 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

emojic ๐Ÿ˜€ ๐Ÿ™‚ ๐Ÿ˜‡

Crates.io Documentation License

Emoji constants for your rusty strings. This crate is inspired by the Go library emoji written by @enescakir.

Notice that this file uses the actual Unicode emojis to given visual example of the result. However, depending on the font and support on your device, not all emojis might be represented correctly, especially the newer ones.

๐Ÿ“ฆ Cargo.toml

[dependencies]
emojic = "0.4"

๐Ÿ”ง Example

use emojic::Gender;
use emojic::Pair;
use emojic::Tone;
use emojic::flat::*;

println!("Hello {}", WAVING_HAND);
println!(
    "I'm {} from {}",
    TECHNOLOGIST.gender(Gender::Male),
    FLAG_TURKIYE
);
println!(
    "Different skin tones default {} light {} dark {}",
    THUMBS_UP,
    OK_HAND.tone(Tone::Light),
    CALL_ME_HAND.tone(Tone::Dark)
);
println!(
    "Multiple skin tones: default: {}, same: {} different: {}",
    PERSON_HOLDING_HANDS,
    PERSON_HOLDING_HANDS.tone(Tone::Medium),
    PERSON_HOLDING_HANDS.tone((Tone::Light, Tone::Dark))
);
println!(
    "Different sexes: default: {} male: {}, female: {}",
    GENIE,
    GENIE.gender(Gender::Male),
    GENIE.gender(Gender::Female),
);
println!(
    "Mixing attributes: men & light: {} and women & dark: {}",
    PERSON_TIPPING_HAND.gender(Gender::Male).tone(Tone::Light),
    PERSON_TIPPING_HAND.gender(Gender::Female).tone(Tone::Dark),
);

๐Ÿ–จ๏ธ Output

Hello ๐Ÿ‘‹
I'm ๐Ÿ‘จโ€๐Ÿ’ป from ๐Ÿ‡น๐Ÿ‡ท
Different skin tones default ๐Ÿ‘ light ๐Ÿ‘Œ๐Ÿป dark ๐Ÿค™๐Ÿฟ
Multiple skin tones: default: ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘, same: ๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘๐Ÿฝ different: ๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘๐Ÿฟ
Different sexes: default: ๐Ÿงž male: ๐Ÿงžโ€โ™‚๏ธ, female: ๐Ÿงžโ€โ™€๏ธ
Mixing attributes: men & light: ๐Ÿ’๐Ÿปโ€โ™‚๏ธ and women & dark: ๐Ÿ’๐Ÿฟโ€โ™€๏ธ

This crate contains emojis constants based on the Full Emoji List v16.0. Including its categorization:

assert_eq!(
    emojic::grouped::people_and_body::hands::OPEN_HANDS, //๐Ÿคฒ
    emojic::flat::OPEN_HANDS, //๐Ÿคฒ
);

As well as iterators to list all the emojis in each group and subgroup:

// Iterates all hand emoji: ๐Ÿ‘, ๐Ÿ™, ๐Ÿค, ๐Ÿซถ, ๐Ÿ‘, ๐Ÿคฒ, ๐Ÿ™Œ
emojic::grouped::people_and_body::hands::base_emojis()

Additional, it has functions to generate (arbitrary) country and regional flags.

// ๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ โˆฉ ๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ โŠ‚ ๐Ÿ‡ฌ๐Ÿ‡ง โŠ„ ๐Ÿ‡ช๐Ÿ‡บ
println!("{} โˆฉ {} โŠ‚ {} โŠ„ {}",
    regional_flag("GB-ENG"),
    regional_flag("GB-SCT"),
    country_flag("GB"),
    country_flag("EU"),
)

Finally, this crate has allows parsing emoji aliases from the github/gemoji list via parse_alias.

parse_alias(":+1:") // ๐Ÿ‘
parse_alias(":100:") // ๐Ÿ’ฏ
parse_alias(":woman_astronaut:") // ๐Ÿ‘ฉโ€๐Ÿš€

And it has also an utility to parse and replace these emoji aliases in text via parse_text.

// a ๐Ÿฅช consists of ๐Ÿž, ๐Ÿฅ“, and some ๐Ÿง€
parse_text("a :sandwich: consists of :bread:, :bacon:, and some :cheese:")

๐Ÿ”ญ Examples

For more examples have a look at the examples folder.

๐Ÿงฉ Crate features

This crate is no_std by default, means it should be usable in WASM and other restricted platforms. However, some additional functions need the alloc crate (normally part of std), thus it is enabled by default.

  • default: (implies alloc)
    Automatically enabled if not opt-out:

    [dependencies.emojic]
    version = "0.4"
    default-features = false
  • alloc: (implies hashbrown and lazy_static)
    Requires a global allocator, enables some additional functions: the parse_text function and the ad-hoc flag-functions (country_flag & regional_flag) (the flag constants are unaffected).

    Notice, that lazy_static, by default, pulls-in std to use mutices for waiting. This is good if you do have std available, and bad if not. However, the alternative is to instruct lazy_static to use spinlocks instead. Yet, since crate-features are unified by Cargo, it would be bad for all user that have std, to requiring it by default. Instead, if you want to use this alloc feature, but you don't have std (e.g. in your binary crate), you can simply add lazy_static yourself, and make it to use spinlocks, which will apply globally. E.g. add to your Cargo.toml:

    [dependencies.lazy_static]
    version = "1.4"
    features = ["spin_no_std"]

    Also see: rust-lang-nursery/lazy-static.rs#150

๐Ÿ“ License

Licensed under MIT License (LICENSE).

๐Ÿšง Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the MIT license, shall be licensed as above, without any additional terms or conditions.

About

Emoji constants for rusty strings

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •