Current section
Files
Jump to
Current section
Files
doc/uuid.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Module uuid</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
</head>
<body bgcolor="white">
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<hr>
<h1>Module uuid</h1>
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
<h3><a name="Erlang_UUID_Generation">Erlang UUID Generation</a></h3>
<a href="http://www.ietf.org/rfc/rfc4122.txt" target="_top"><tt>http://www.ietf.org/rfc/rfc4122.txt</tt></a> is the reference for official UUIDs.
<p>Copyright © 2011-2014 Michael Truog</p>
<p><b>Version:</b> 1.3.2 Sep 30 2014 14:04:49
------------------------------------------------------------------------</p>
<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog [at] gmail (dot) com"><tt>mjtruog [at] gmail (dot) com</tt></a>).</p>
<h2><a name="description">Description</a></h2>
<h3><a name="Erlang_UUID_Generation">Erlang UUID Generation</a></h3>
<a href="http://www.ietf.org/rfc/rfc4122.txt" target="_top"><tt>http://www.ietf.org/rfc/rfc4122.txt</tt></a> is the reference for official UUIDs.
This implementation provides a version 1 UUID that includes both the
Erlang pid identifier (ID, Serial, Creation) and the distributed Erlang
node name within the 48 bit node ID. To make room for the Erlang pid
identifier, the 48 bits from the MAC address
(i.e., 3 OCI (Organizationally Unique Identifier) bytes and
3 NIC (Network Interface Controller) specific bytes) and
the distributed Erlang node name are bitwise-XORed down to 16 bits.
The Erlang pid is bitwise-XORed from 72 bits down to 32 bits.
The version 3 (MD5), version 4 (random), and version 5 (SHA)
methods are provided as specified within the RFC.
<h2><a name="types">Data Types</a></h2>
<h3 class="typedecl"><a name="type-state">state()</a></h3>
<p><tt>state() = #uuid_state{}</tt></p>
<h3 class="typedecl"><a name="type-uuid">uuid()</a></h3>
<p><tt>uuid() = <<_:128>></tt></p>
<h2><a name="index">Function Index</a></h2>
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#get_v1-1">get_v1/1</a></td><td>
<h4><a name="Get_a_v1_UUID.">Get a v1 UUID.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_v1_time-0">get_v1_time/0</a></td><td>
<h4><a name="Get_the_current_time_value_in_a_manner_consistent_with_the_v1_UUID.">Get the current time value in a manner consistent with the v1 UUID.</a></h4>
The result is an integer in microseconds.</td></tr>
<tr><td valign="top"><a href="#get_v1_time-1">get_v1_time/1</a></td><td>
<h4><a name="Get_the_current_time_value_in_a_manner_consistent_with_the_v1_UUID.">Get the current time value in a manner consistent with the v1 UUID.</a></h4>
The result is an integer in microseconds.</td></tr>
<tr><td valign="top"><a href="#get_v3-1">get_v3/1</a></td><td>
<h4><a name="Get_a_v3_UUID.">Get a v3 UUID.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_v3-2">get_v3/2</a></td><td>
<h4><a name="Get_a_v3_UUID_in_a_particular_namespace.">Get a v3 UUID in a particular namespace.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_v3_compat-1">get_v3_compat/1</a></td><td>
<h4><a name="Get_a_compatible_v3_UUID.">Get a compatible v3 UUID.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</td></tr>
<tr><td valign="top"><a href="#get_v3_compat-2">get_v3_compat/2</a></td><td>
<h4><a name="Get_a_compatible_v3_UUID_in_a_particular_namespace.">Get a compatible v3 UUID in a particular namespace.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</td></tr>
<tr><td valign="top"><a href="#get_v4-0">get_v4/0</a></td><td>
<h4><a name="Get_a_v4_UUID_(using_crypto/openssl).">Get a v4 UUID (using crypto/openssl).</a></h4>
crypto:strong_rand_bytes/1 repeats in the same way as
RAND_bytes within OpenSSL.</td></tr>
<tr><td valign="top"><a href="#get_v4-1">get_v4/1</a></td><td></td></tr>
<tr><td valign="top"><a href="#get_v4_urandom-0">get_v4_urandom/0</a></td><td>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_2006).">Get a v4 UUID (using Wichmann-Hill 2006).</a></h4>
random_wh06_int:uniform/1 repeats every 2.66e36 (2^121) approx.</td></tr>
<tr><td valign="top"><a href="#get_v4_urandom_bigint-0">get_v4_urandom_bigint/0</a></td><td>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_1982).">Get a v4 UUID (using Wichmann-Hill 1982).</a></h4><p>
random:uniform/1 repeats every 2.78e13
(see B.A. Wichmann and I.D.Hill, in
'An efficient and portable pseudo-random number generator',
Journal of Applied Statistics. AS183. 1982, or Byte March 1987)
a single random:uniform/1 call can provide a maximum of 45 bits
(currently this is not significantly faster
because multiple function calls are necessary)</p>.</td></tr>
<tr><td valign="top"><a href="#get_v4_urandom_native-0">get_v4_urandom_native/0</a></td><td>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_1982).">Get a v4 UUID (using Wichmann-Hill 1982).</a></h4>
Attempt to only use native integers (Erlang limits integers to 27 bits
before using bigints) to investigate the speed when using HiPE.</td></tr>
<tr><td valign="top"><a href="#get_v5-1">get_v5/1</a></td><td>
<h4><a name="Get_a_v5_UUID.">Get a v5 UUID.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_v5-2">get_v5/2</a></td><td>
<h4><a name="Get_a_v5_UUID_in_a_particular_namespace.">Get a v5 UUID in a particular namespace.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#get_v5_compat-1">get_v5_compat/1</a></td><td>
<h4><a name="Get_a_compatible_v5_UUID.">Get a compatible v5 UUID.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</td></tr>
<tr><td valign="top"><a href="#get_v5_compat-2">get_v5_compat/2</a></td><td>
<h4><a name="Get_a_compatible_v5_UUID_in_a_particular_namespace.">Get a compatible v5 UUID in a particular namespace.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</td></tr>
<tr><td valign="top"><a href="#increment-1">increment/1</a></td><td>
<h4><a name="Increment_the_clock_sequence_of_v1_UUID_state.">Increment the clock sequence of v1 UUID state.</a></h4>
The RFC said to increment the clock sequence counter
if the system clock was set backwards.</td></tr>
<tr><td valign="top"><a href="#is_uuid-1">is_uuid/1</a></td><td>
<h4><a name="Is_the_binary_a_UUID?">Is the binary a UUID?</a></h4>.</td></tr>
<tr><td valign="top"><a href="#is_v1-1">is_v1/1</a></td><td>
<h4><a name="Is_the_binary_a_v1_UUID?">Is the binary a v1 UUID?</a></h4>.</td></tr>
<tr><td valign="top"><a href="#is_v3-1">is_v3/1</a></td><td>
<h4><a name="Is_the_binary_a_v3_UUID?">Is the binary a v3 UUID?</a></h4>.</td></tr>
<tr><td valign="top"><a href="#is_v4-1">is_v4/1</a></td><td>
<h4><a name="Is_the_binary_a_v4_UUID?">Is the binary a v4 UUID?</a></h4>.</td></tr>
<tr><td valign="top"><a href="#is_v5-1">is_v5/1</a></td><td>
<h4><a name="Is_the_binary_a_v5_UUID?">Is the binary a v5 UUID?</a></h4>.</td></tr>
<tr><td valign="top"><a href="#mac_address-0">mac_address/0</a></td><td>
<h4><a name="Provide_a_usable_network_interface_MAC_address.">Provide a usable network interface MAC address.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#new-1">new/1</a></td><td>
<h4><a name="Create_new_UUID_state_for_v1_UUID_generation.">Create new UUID state for v1 UUID generation.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#new-2">new/2</a></td><td>
<h4><a name="Create_new_UUID_state_for_v1_UUID_generation_using_a_specific_type_of_timestamp.">Create new UUID state for v1 UUID generation using a specific type of timestamp.</a></h4>
The timestamp can either be based on erlang:now/0 with erlang or
os:timestamp/0 with os.</td></tr>
<tr><td valign="top"><a href="#string_to_uuid-1">string_to_uuid/1</a></td><td>
<h4><a name="Convert_a_string_representation_to_a_UUID.">Convert a string representation to a UUID.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#test-0">test/0</a></td><td>
<h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#uuid_to_list-1">uuid_to_list/1</a></td><td>
<h4><a name="Convert_a_UUID_to_a_list.">Convert a UUID to a list.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#uuid_to_string-1">uuid_to_string/1</a></td><td>
<h4><a name="Convert_a_UUID_to_a_string_representation.">Convert a UUID to a string representation.</a></h4>.</td></tr>
<tr><td valign="top"><a href="#uuid_to_string-2">uuid_to_string/2</a></td><td>
<h4><a name="Convert_a_UUID_to_a_string_representation_based_on_an_option.">Convert a UUID to a string representation based on an option.</a></h4>.</td></tr>
</table>
<h2><a name="functions">Function Details</a></h2>
<h3 class="function"><a name="get_v1-1">get_v1/1</a></h3>
<div class="spec">
<p><tt>get_v1(Uuid_state::#uuid_state{}) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v1_UUID.">Get a v1 UUID.</a></h4>
</p>
<h3 class="function"><a name="get_v1_time-0">get_v1_time/0</a></h3>
<div class="spec">
<p><tt>get_v1_time() -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Get_the_current_time_value_in_a_manner_consistent_with_the_v1_UUID.">Get the current time value in a manner consistent with the v1 UUID.</a></h4>
The result is an integer in microseconds.</p>
<h3 class="function"><a name="get_v1_time-1">get_v1_time/1</a></h3>
<div class="spec">
<p><tt>get_v1_time(Uuid_state::os | erlang | #uuid_state{} | <a href="#type-uuid">uuid()</a>) -> non_neg_integer()</tt><br></p>
</div><p>
<h4><a name="Get_the_current_time_value_in_a_manner_consistent_with_the_v1_UUID.">Get the current time value in a manner consistent with the v1 UUID.</a></h4>
The result is an integer in microseconds.</p>
<h3 class="function"><a name="get_v3-1">get_v3/1</a></h3>
<div class="spec">
<p><tt>get_v3(Data::binary()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v3_UUID.">Get a v3 UUID.</a></h4>
</p>
<h3 class="function"><a name="get_v3-2">get_v3/2</a></h3>
<div class="spec">
<p><tt>get_v3(Namespace::dns | url | oid | x500 | binary(), Data::binary() | iolist()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v3_UUID_in_a_particular_namespace.">Get a v3 UUID in a particular namespace.</a></h4>
</p>
<h3 class="function"><a name="get_v3_compat-1">get_v3_compat/1</a></h3>
<div class="spec">
<p><tt>get_v3_compat(Data::binary()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_compatible_v3_UUID.">Get a compatible v3 UUID.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</p>
<h3 class="function"><a name="get_v3_compat-2">get_v3_compat/2</a></h3>
<div class="spec">
<p><tt>get_v3_compat(Namespace::dns | url | oid | x500 | binary(), Data::binary() | iolist()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_compatible_v3_UUID_in_a_particular_namespace.">Get a compatible v3 UUID in a particular namespace.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</p>
<h3 class="function"><a name="get_v4-0">get_v4/0</a></h3>
<div class="spec">
<p><tt>get_v4() -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v4_UUID_(using_crypto/openssl).">Get a v4 UUID (using crypto/openssl).</a></h4>
crypto:strong_rand_bytes/1 repeats in the same way as
RAND_bytes within OpenSSL.
crypto:rand_bytes/1 repeats in the same way as
RAND_pseudo_bytes within OpenSSL.
if OpenSSL is configured to use the MD PRNG (default) with SHA1
(in openssl/crypto/rand/md_rand.c),
the collisions are between 2^80 and 2^51
(<a href="http://eprint.iacr.org/2008/469.pdf" target="_top"><tt>http://eprint.iacr.org/2008/469.pdf</tt></a>). So, that means "weak" would
repeat ideally every 1.21e24 and at worst every 2.25e15.
if OpenSSL was compiled in FIPS mode, it uses ANSI X9.31 RNG
and would have collisions based on 3DES.</p>
<h3 class="function"><a name="get_v4-1">get_v4/1</a></h3>
<div class="spec">
<p><tt>get_v4(X1::strong | weak) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div>
<h3 class="function"><a name="get_v4_urandom-0">get_v4_urandom/0</a></h3>
<div class="spec">
<p><tt>get_v4_urandom() -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_2006).">Get a v4 UUID (using Wichmann-Hill 2006).</a></h4>
random_wh06_int:uniform/1 repeats every 2.66e36 (2^121) approx.
(see B.A. Wichmann and I.D.Hill, in
'Generating good pseudo-random numbers',
Computational Statistics and Data Analysis 51 (2006) 1614-1622)
a single random_wh06_int:uniform/1 call can provide a maximum of 124 bits
(see random_wh06_int.erl for details)</p>
<h3 class="function"><a name="get_v4_urandom_bigint-0">get_v4_urandom_bigint/0</a></h3>
<div class="spec">
<p><tt>get_v4_urandom_bigint() -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_1982).">Get a v4 UUID (using Wichmann-Hill 1982).</a></h4><p>
random:uniform/1 repeats every 2.78e13
(see B.A. Wichmann and I.D.Hill, in
'An efficient and portable pseudo-random number generator',
Journal of Applied Statistics. AS183. 1982, or Byte March 1987)
a single random:uniform/1 call can provide a maximum of 45 bits
(currently this is not significantly faster
because multiple function calls are necessary)</p>
<p>explain the 45 bits of randomness:
random:uniform/0 code:
B1 = (A1*171) rem 30269,
B2 = (A2*172) rem 30307,
B3 = (A3*170) rem 30323,
put(random_seed, {B1,B2,B3}),
R = A1/30269 + A2/30307 + A3/30323,
R - trunc(R).</p>
{B1, B2, B3} becomes the next seed value {A1, A2, A3}, so:
R = (918999161 * A1 + 917846887 * A2 + 917362583 * A3) / 27817185604309
Whatever the values for A1, A2, and A3,
(918999161 * A1 + 917846887 * A2 + 917362583 * A3) can not exceed
27817185604309 (30269 * 30307 * 30323) because of the previous modulus.
So, random:uniform/1 is unable to uniformly sample numbers beyond
a N of 27817185604309. The bits required to represent 27817185604309:
1> (math:log(27817185604309) / math:log(2)) + 1.
45.6610416965467
</p>
<h3 class="function"><a name="get_v4_urandom_native-0">get_v4_urandom_native/0</a></h3>
<div class="spec">
<p><tt>get_v4_urandom_native() -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v4_UUID_(using_Wichmann-Hill_1982).">Get a v4 UUID (using Wichmann-Hill 1982).</a></h4>
Attempt to only use native integers (Erlang limits integers to 27 bits
before using bigints) to investigate the speed when using HiPE.</p>
<h3 class="function"><a name="get_v5-1">get_v5/1</a></h3>
<div class="spec">
<p><tt>get_v5(Data::binary()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v5_UUID.">Get a v5 UUID.</a></h4>
</p>
<h3 class="function"><a name="get_v5-2">get_v5/2</a></h3>
<div class="spec">
<p><tt>get_v5(Namespace::dns | url | oid | x500 | binary(), Data::binary() | iolist()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_v5_UUID_in_a_particular_namespace.">Get a v5 UUID in a particular namespace.</a></h4>
</p>
<h3 class="function"><a name="get_v5_compat-1">get_v5_compat/1</a></h3>
<div class="spec">
<p><tt>get_v5_compat(Data::binary()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_compatible_v5_UUID.">Get a compatible v5 UUID.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</p>
<h3 class="function"><a name="get_v5_compat-2">get_v5_compat/2</a></h3>
<div class="spec">
<p><tt>get_v5_compat(Namespace::dns | url | oid | x500 | binary(), Data::binary() | iolist()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Get_a_compatible_v5_UUID_in_a_particular_namespace.">Get a compatible v5 UUID in a particular namespace.</a></h4>
Do not use all bits from the checksum so that the UUID matches external
implementations.</p>
<h3 class="function"><a name="increment-1">increment/1</a></h3>
<div class="spec">
<p><tt>increment(State::#uuid_state{}) -> #uuid_state{}</tt><br></p>
</div><p>
<h4><a name="Increment_the_clock_sequence_of_v1_UUID_state.">Increment the clock sequence of v1 UUID state.</a></h4>
The RFC said to increment the clock sequence counter
if the system clock was set backwards. However, erlang:now/0 always
provides increasing time values, so this function is not necessary
when the system clock changes. Since the version 1 node id contains the
Erlang PID ID, Serial, and Creation numbers in a (non-destructive)
bitwise-xor operation, the node id is specific to both the Erlang node
and the Erlang node lifetime (the PID Creation is different after a node
crash). Therefore, it is unclear why this function would be necessary
within this Erlang implementation of v1 UUID generation (if the system
is always running). The only event that seems to require this function's
usage is if the v1 UUID has been stored and retrieved where both actions
occurred at a point with a system clock change inbetween or possibly
on different machines with a large difference in system clocks
(i.e., in some situation that isn't handled by the Erlang VM, so
possibly if an external distribution mechanism was used between
Erlang VMs, not connected with distributed Erlang).</p>
<h3 class="function"><a name="is_uuid-1">is_uuid/1</a></h3>
<div class="spec">
<p><tt>is_uuid(Value::any()) -> boolean()</tt><br></p>
</div><p>
<h4><a name="Is_the_binary_a_UUID?">Is the binary a UUID?</a></h4>
</p>
<h3 class="function"><a name="is_v1-1">is_v1/1</a></h3>
<div class="spec">
<p><tt>is_v1(Value::any()) -> boolean()</tt><br></p>
</div><p>
<h4><a name="Is_the_binary_a_v1_UUID?">Is the binary a v1 UUID?</a></h4>
</p>
<h3 class="function"><a name="is_v3-1">is_v3/1</a></h3>
<div class="spec">
<p><tt>is_v3(Value::any()) -> boolean()</tt><br></p>
</div><p>
<h4><a name="Is_the_binary_a_v3_UUID?">Is the binary a v3 UUID?</a></h4>
</p>
<h3 class="function"><a name="is_v4-1">is_v4/1</a></h3>
<div class="spec">
<p><tt>is_v4(Value::any()) -> boolean()</tt><br></p>
</div><p>
<h4><a name="Is_the_binary_a_v4_UUID?">Is the binary a v4 UUID?</a></h4>
</p>
<h3 class="function"><a name="is_v5-1">is_v5/1</a></h3>
<div class="spec">
<p><tt>is_v5(Value::any()) -> boolean()</tt><br></p>
</div><p>
<h4><a name="Is_the_binary_a_v5_UUID?">Is the binary a v5 UUID?</a></h4>
</p>
<h3 class="function"><a name="mac_address-0">mac_address/0</a></h3>
<div class="spec">
<p><tt>mac_address() -> [non_neg_integer()]</tt><br></p>
</div><p>
<h4><a name="Provide_a_usable_network_interface_MAC_address.">Provide a usable network interface MAC address.</a></h4>
</p>
<h3 class="function"><a name="new-1">new/1</a></h3>
<div class="spec">
<p><tt>new(Pid::pid()) -> #uuid_state{}</tt><br></p>
</div><p>
<h4><a name="Create_new_UUID_state_for_v1_UUID_generation.">Create new UUID state for v1 UUID generation.</a></h4>
</p>
<h3 class="function"><a name="new-2">new/2</a></h3>
<div class="spec">
<p><tt>new(Pid::pid(), Options::os | erlang | [{timestamp_type, os | erlang} | {mac_address, [non_neg_integer()]}]) -> #uuid_state{}</tt><br></p>
</div><p>
<h4><a name="Create_new_UUID_state_for_v1_UUID_generation_using_a_specific_type_of_timestamp.">Create new UUID state for v1 UUID generation using a specific type of timestamp.</a></h4>
The timestamp can either be based on erlang:now/0 with erlang or
os:timestamp/0 with os. erlang:now/0 will make sure all time values are
increasing, even if the system clock changes. os:timestamp/0 will get the
system clock quickly without modifying the result.</p>
<h3 class="function"><a name="string_to_uuid-1">string_to_uuid/1</a></h3>
<div class="spec">
<p><tt>string_to_uuid(X1::string() | binary()) -> <a href="#type-uuid">uuid()</a></tt><br></p>
</div><p>
<h4><a name="Convert_a_string_representation_to_a_UUID.">Convert a string representation to a UUID.</a></h4>
</p>
<h3 class="function"><a name="test-0">test/0</a></h3>
<div class="spec">
<p><tt>test() -> ok</tt><br></p>
</div><p>
<h4><a name="Regression_test.">Regression test.</a></h4>
</p>
<h3 class="function"><a name="uuid_to_list-1">uuid_to_list/1</a></h3>
<div class="spec">
<p><tt>uuid_to_list(Value::<a href="#type-uuid">uuid()</a>) -> iolist()</tt><br></p>
</div><p>
<h4><a name="Convert_a_UUID_to_a_list.">Convert a UUID to a list.</a></h4>
</p>
<h3 class="function"><a name="uuid_to_string-1">uuid_to_string/1</a></h3>
<div class="spec">
<p><tt>uuid_to_string(Value::<a href="#type-uuid">uuid()</a>) -> string()</tt><br></p>
</div><p>
<h4><a name="Convert_a_UUID_to_a_string_representation.">Convert a UUID to a string representation.</a></h4>
</p>
<h3 class="function"><a name="uuid_to_string-2">uuid_to_string/2</a></h3>
<div class="spec">
<p><tt>uuid_to_string(Value::<a href="#type-uuid">uuid()</a>, Option::standard | nodash | list_standard | list_nodash | binary_standard | binary_nodash) -> string() | binary()</tt><br></p>
</div><p>
<h4><a name="Convert_a_UUID_to_a_string_representation_based_on_an_option.">Convert a UUID to a string representation based on an option.</a></h4>
</p>
<hr>
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
<p><i>Generated by EDoc, Sep 30 2014, 14:04:49.</i></p>
</body>
</html>