Generic case conversion utilities for API and data transformations.
This namespace provides reusable case conversion utilities that handle transformations between different naming conventions commonly used in APIs:
These functions are designed to be nil-safe and handle nested data structures where appropriate.
Usage: (:require [boundary.core.utils.case-conversion :as case-conversion])
(case-conversion/camel-case->kebab-case-map {:userId "123" :tenantId "456"}) ;; => {:user-id "123" :tenant-id "456"}
Generic case conversion utilities for API and data transformations.
This namespace provides reusable case conversion utilities that handle
transformations between different naming conventions commonly used in APIs:
- camelCase (JavaScript/JSON APIs)
- kebab-case (Clojure idioms)
- snake_case (Database/SQL)
These functions are designed to be nil-safe and handle nested data structures
where appropriate.
Usage:
(:require [boundary.core.utils.case-conversion :as case-conversion])
(case-conversion/camel-case->kebab-case-map {:userId "123" :tenantId "456"})
;; => {:user-id "123" :tenant-id "456"}(camel-case->kebab-case-map m)Transform camelCase API keys to kebab-case internal keys (nil-safe).
This is a generic version that handles common API field transformations. For domain-specific transformations, compose this with additional transforms.
Args: m: Map with camelCase keyword keys, or nil
Returns: Map with kebab-case keyword keys, or nil if input is nil
Example: (camel-case->kebab-case-map {:userId "123" :tenantId "456"}) ;; => {:user-id "123" :tenant-id "456"}
Transform camelCase API keys to kebab-case internal keys (nil-safe).
This is a generic version that handles common API field transformations.
For domain-specific transformations, compose this with additional transforms.
Args:
m: Map with camelCase keyword keys, or nil
Returns:
Map with kebab-case keyword keys, or nil if input is nil
Example:
(camel-case->kebab-case-map {:userId "123" :tenantId "456"})
;; => {:user-id "123" :tenant-id "456"}(camel-case->kebab-case-string s)Convert a camelCase string to kebab-case string.
Args: s: camelCase string
Returns: kebab-case string
Example: (camel-case->kebab-case-string "userId") ;; => "user-id"
Convert a camelCase string to kebab-case string. Args: s: camelCase string Returns: kebab-case string Example: (camel-case->kebab-case-string "userId") ;; => "user-id"
(deep-transform-keys transform-fn data)Recursively transform all keys in a nested data structure using transform-fn.
Args: transform-fn: Function to transform each key data: Nested data structure (maps, vectors, lists)
Returns: Data structure with all keys transformed
Example: (deep-transform-keys camel-case->kebab-case-string {:userId "123" :userInfo {:firstName "John"}})
Recursively transform all keys in a nested data structure using transform-fn.
Args:
transform-fn: Function to transform each key
data: Nested data structure (maps, vectors, lists)
Returns:
Data structure with all keys transformed
Example:
(deep-transform-keys camel-case->kebab-case-string
{:userId "123" :userInfo {:firstName "John"}})(kebab-case->camel-case-map m)Transform kebab-case internal keys to camelCase API keys (nil-safe).
This is a generic version that handles basic case conversion. For domain-specific transformations (like type conversions), compose this with additional transforms.
Args: m: Map with kebab-case keyword keys, or nil
Returns: Map with camelCase keyword keys, or nil if input is nil
Example: (kebab-case->camel-case-map {:user-id "123" :tenant-id "456"}) ;; => {:userId "123" :tenantId "456"}
Transform kebab-case internal keys to camelCase API keys (nil-safe).
This is a generic version that handles basic case conversion.
For domain-specific transformations (like type conversions),
compose this with additional transforms.
Args:
m: Map with kebab-case keyword keys, or nil
Returns:
Map with camelCase keyword keys, or nil if input is nil
Example:
(kebab-case->camel-case-map {:user-id "123" :tenant-id "456"})
;; => {:userId "123" :tenantId "456"}(kebab-case->camel-case-string s)Convert a kebab-case string to camelCase string.
Args: s: kebab-case string
Returns: camelCase string
Example: (kebab-case->camel-case-string "user-id") ;; => "userId"
Convert a kebab-case string to camelCase string. Args: s: kebab-case string Returns: camelCase string Example: (kebab-case->camel-case-string "user-id") ;; => "userId"
(kebab-case->snake-case-keyword kw)Convert a kebab-case keyword to snake_case keyword.
Args: kw: kebab-case keyword
Returns: snake_case keyword
Example: (kebab-case->snake-case-keyword :created-at) ;; => :created_at
Convert a kebab-case keyword to snake_case keyword. Args: kw: kebab-case keyword Returns: snake_case keyword Example: (kebab-case->snake-case-keyword :created-at) ;; => :created_at
(kebab-case->snake-case-map m)Transform kebab-case internal keys to snake_case database keys (nil-safe).
Args: m: Map with kebab-case keyword keys, or nil
Returns: Map with snake_case keyword keys, or nil if input is nil
Example: (kebab-case->snake-case-map {:created-at "2024-01-01" :user-id "123"}) ;; => {:created_at "2024-01-01" :user_id "123"}
Transform kebab-case internal keys to snake_case database keys (nil-safe).
Args:
m: Map with kebab-case keyword keys, or nil
Returns:
Map with snake_case keyword keys, or nil if input is nil
Example:
(kebab-case->snake-case-map {:created-at "2024-01-01" :user-id "123"})
;; => {:created_at "2024-01-01" :user_id "123"}(kebab-case->snake-case-string s)Convert a kebab-case string to snake_case string.
Args: s: kebab-case string
Returns: snake_case string
Example: (kebab-case->snake-case-string "created-at") ;; => "created_at"
Convert a kebab-case string to snake_case string. Args: s: kebab-case string Returns: snake_case string Example: (kebab-case->snake-case-string "created-at") ;; => "created_at"
(snake-case->kebab-case-map m)Transform snake_case database keys to kebab-case internal keys (nil-safe).
Args: m: Map with snake_case keyword keys, or nil
Returns: Map with kebab-case keyword keys, or nil if input is nil
Example: (snake-case->kebab-case-map {:created_at "2024-01-01" :user_id "123"}) ;; => {:created-at "2024-01-01" :user-id "123"}
Transform snake_case database keys to kebab-case internal keys (nil-safe).
Args:
m: Map with snake_case keyword keys, or nil
Returns:
Map with kebab-case keyword keys, or nil if input is nil
Example:
(snake-case->kebab-case-map {:created_at "2024-01-01" :user_id "123"})
;; => {:created-at "2024-01-01" :user-id "123"}(snake-case->kebab-case-string s)Convert a snake_case string to kebab-case string.
Args: s: snake_case string
Returns: kebab-case string
Example: (snake-case->kebab-case-string "created_at") ;; => "created-at"
Convert a snake_case string to kebab-case string. Args: s: snake_case string Returns: kebab-case string Example: (snake-case->kebab-case-string "created_at") ;; => "created-at"
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |