chemistru-elements

Crates.iochemistru-elements
lib.rschemistru-elements
version1.0.1
created_at2023-10-02 10:32:14.610009+00
updated_at2025-09-12 12:07:08.709892+00
descriptionBasic Elemental Representation
homepagehttps://github.com/Ross-Morgan/chemistru-elements
repositoryhttps://github.com/Ross-Morgan/chemistru-elements
max_upload_size
id989794
size211,777
Cryptollusion (Ross-Morgan)

documentation

README

Chemistru Elements

GitHub Actions Workflow Status docs.rs Crates.io Version Crates.io License Crates.io Total Downloads GitHub last commit GitHub commit activity

Provides one of two functions:

  1. Provides a static vec of all the elements, with data loaded from a JSON file.
  2. Implements ToTokens from the quote library, allowing use with related chemistru crates.

Static Vector

The elements are stored in the lazily-initialised vector chemistru_elements::ELEMENTS

Getting Elements By Atomic (Proton) Number

// Atomic (proton) number, in this case, hydrogen
let z = 1;

// Static reference to the struct representing hydrogen
let element = chemistru_elements::element_from_atomic_number(z);

Getting Elements By Name

// Name of element
// Case insensitive and accepts multiple spellings
// i.e. 'Cesium', 'Caesium', 'CaEsIuM' will all work
let name_1 = "caesium";
let name_2 = "cesium";

let element_1 = chemistru_elements::element_from_name(name_1)
let element_2 = chemistru_elements::element_from_name(name_2)

assert_eq!(element_1, element_2)

Preloading Elements

Since the static vector of Elements is created using lazy_static, it will not be initialised until it is used (lazy initialisation)

This ensures that the static vector of Elements is initialised. This is useful if initialising the element vector later would cause some tangible delay for the user.

Without

operation_user_sees();

// May cause a tangible delay (interacting with io)
let element = ELEMENT[0];

operation_user_sees();

With

// Pre-initialise the vector of elements
chemistru_elements::preload_elements();

operation_user_sees();

// Virually no delay (trivial operation)
let element = ELEMENT[0];

operation_user_sees();
Commit count: 127

cargo fmt