tds_protocol/
lib.rs

1//! # tds-protocol
2//!
3//! Pure implementation of the MS-TDS (Tabular Data Stream) protocol used by
4//! Microsoft SQL Server.
5//!
6//! This crate provides `no_std` compatible packet structures, token parsing,
7//! and serialization for TDS protocol versions 7.4 through 8.0.
8//!
9//! ## Features
10//!
11//! - `std` (default): Enable standard library support
12//! - `alloc`: Enable allocation without full std (requires `alloc` crate)
13//!
14//! ## Design Philosophy
15//!
16//! This crate is intentionally IO-agnostic. It contains no networking logic and
17//! makes no assumptions about the async runtime. Higher-level crates build upon
18//! this foundation to provide async I/O capabilities.
19//!
20//! ## Example
21//!
22//! ```rust,ignore
23//! use tds_protocol::{PacketHeader, PacketType, PacketStatus};
24//!
25//! let header = PacketHeader {
26//!     packet_type: PacketType::SqlBatch,
27//!     status: PacketStatus::END_OF_MESSAGE,
28//!     length: 100,
29//!     spid: 0,
30//!     packet_id: 1,
31//!     window: 0,
32//! };
33//! ```
34
35#![cfg_attr(not(feature = "std"), no_std)]
36#![warn(missing_docs)]
37#![deny(unsafe_code)]
38
39#[cfg(feature = "alloc")]
40extern crate alloc;
41
42pub mod codec;
43pub mod crypto;
44pub mod error;
45pub mod login7;
46pub mod packet;
47pub mod prelogin;
48pub mod rpc;
49pub mod sql_batch;
50pub mod token;
51pub mod tvp;
52pub mod types;
53pub mod version;
54
55pub use error::ProtocolError;
56pub use login7::{
57    FeatureExtension, FeatureId, Login7, OptionFlags1, OptionFlags2, OptionFlags3, TypeFlags,
58};
59pub use packet::{
60    DEFAULT_PACKET_SIZE, MAX_PACKET_SIZE, PACKET_HEADER_SIZE, PacketHeader, PacketStatus,
61    PacketType,
62};
63pub use prelogin::{EncryptionLevel, PreLogin, PreLoginOption};
64pub use rpc::{ParamFlags, ProcId, RpcOptionFlags, RpcParam, RpcRequest, TypeInfo as RpcTypeInfo};
65pub use sql_batch::{SqlBatch, encode_sql_batch, encode_sql_batch_with_transaction};
66pub use token::{
67    ColMetaData, Collation, ColumnData, Done, DoneInProc, DoneProc, DoneStatus, EnvChange,
68    EnvChangeType, EnvChangeValue, FeatureExtAck, FedAuthInfo, LoginAck, NbcRow, Order, RawRow,
69    ReturnValue, ServerError, ServerInfo, SessionState, SspiToken, Token, TokenParser, TokenType,
70    TypeInfo,
71};
72pub use tvp::{
73    TVP_END_TOKEN, TVP_ROW_TOKEN, TVP_TYPE_ID, TvpColumnDef as TvpWireColumnDef, TvpColumnFlags,
74    TvpEncoder, TvpWireType, encode_tvp_bit, encode_tvp_date, encode_tvp_datetime2,
75    encode_tvp_datetimeoffset, encode_tvp_decimal, encode_tvp_float, encode_tvp_guid,
76    encode_tvp_int, encode_tvp_null, encode_tvp_nvarchar, encode_tvp_time, encode_tvp_varbinary,
77};
78pub use types::{ColumnFlags, TypeId, Updateable};
79pub use version::TdsVersion;
80
81// Always Encrypted metadata types
82pub use crypto::{
83    ALGORITHM_AEAD_AES_256_CBC_HMAC_SHA256, COLUMN_FLAG_ENCRYPTED, CekTable, CekTableEntry,
84    CekValue, ColumnCryptoInfo, CryptoMetadata, ENCRYPTION_TYPE_DETERMINISTIC,
85    ENCRYPTION_TYPE_RANDOMIZED, EncryptionTypeWire, NORMALIZATION_RULE_VERSION,
86    is_column_encrypted,
87};