Expand description
§CAS Codes
A Rust library for parsing and validating Chemical Abstracts Service (CAS) Registry Numbers.
§Features
- Parse and validate CAS numbers with checksum verification
- Zero-cost abstractions (stored as
u32) - Optional Serde,
PostgreSQL, and Diesel integration
§Installation
[dependencies]
cas_codes = "0.1.0"
# With optional features
cas_codes = { version = "0.1.0", features = ["serde", "pgrx"] }§Usage
use cas_codes::CAS;
let cas = CAS::try_from("7732-18-5")?; // Water
assert_eq!(cas.first(), 7732);
assert_eq!(cas.second(), 18);
assert_eq!(cas.check_digit(), 5);
assert_eq!(cas.to_string(), "7732-18-5");
§PostgreSQL Extension
The crate can be built as a PostgreSQL extension using PGRX:
[dependencies]
cas_codes = { version = "0.1.0", features = ["pgrx", "pg17"] }Note: Currently uses PostgreSQL’s varlena type since PGRX doesn’t yet support custom fixed-size types. Future PGRX versions will enable more efficient fixed-size storage.
§Using the Extension
Step 1: Build the extension:
USER_ID=$(id -u) GROUP_ID=$(id -g) docker compose upStep 2: Copy extension files to PostgreSQL:
# Copy the shared library
sudo cp extension/usr/lib/postgresql/17/lib/cas_codes.so /usr/lib/postgresql/17/lib/
# Copy the control file
sudo cp extension/usr/share/postgresql/17/extension/cas_codes.control /usr/share/postgresql/17/extension/
# Copy the SQL file
sudo cp extension/usr/share/postgresql/17/extension/cas_codes--0.1.0.sql /usr/share/postgresql/17/extension/Step 3: Enable in PostgreSQL:
CREATE EXTENSION IF NOT EXISTS cas_codes;Step 4: Use the CAS type:
-- Create a table with CAS numbers
CREATE TABLE reagents (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
cas_number CAS NOT NULL UNIQUE,
purity REAL CHECK (purity > 0 AND purity <= 100)
);§Diesel ORM Integration
For use with Diesel ORM:
[dependencies]
cas_codes = { version = "0.1.0", features = ["postgres"] }Example Diesel table definition:
#[cfg(feature = "diesel")]
diesel::table! {
reagents(id) {
id -> diesel::sql_types::Integer,
name -> diesel::sql_types::Text,
purity -> diesel::sql_types::Float,
cas_code -> ::cas_codes::diesel_impls::CAS,
}
}§License
MIT Licensed.
Modules§
- errors
- Error types for CAS number parsing and validation.
- utils
- Utility functions for working with CAS numbers.