mirror of
https://github.com/nlohmann/json.git
synced 2025-07-28 12:02:00 +03:00
Consolidate documentation (#3071)
* 🔥 consolidate documentation * ♻️ overwork std specializations * 🚚 move images files to mkdocs * ♻️ fix URLs * 🔧 tweak MkDocs configuration * 🔧 add namespaces * 📝 document deprecations * 📝 document documentation generation * 🚸 improve search * 🚸 add examples * 🚧 start adding documentation for macros * 📝 add note for https://github.com/nlohmann/json/issues/874#issuecomment-1001699139 * 📝 overwork example handling * 📝 fix Markdown tables
This commit is contained in:
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/1mp10JbaANo6FUc7"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/r5Tai1spihWHTdFA"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Ptk2BoNyGfrZfxRU"><b>online</b></a>
|
10
doc/examples/array_t.cpp
Normal file
10
doc/examples/array_t.cpp
Normal file
@ -0,0 +1,10 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << std::boolalpha << std::is_same<std::vector<json>, json::array_t>::value << std::endl;
|
||||
}
|
1
doc/examples/array_t.output
Normal file
1
doc/examples/array_t.output
Normal file
@ -0,0 +1 @@
|
||||
true
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/055DW3OWJPwGYr92"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/gM1uqvzukokLwjMa"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/H3tBOr4lpufGRHlF"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/UtGhIQGxCYIml36F"><b>online</b></a>
|
@ -60,7 +60,7 @@ int main()
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use a an invalid array index
|
||||
// try to use an invalid array index
|
||||
json::reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
@ -82,7 +82,7 @@ int main()
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to an nonexistent object key
|
||||
// try to use a JSON pointer to a nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/NHe5FLR1KYaiHwBx"><b>online</b></a>
|
@ -36,7 +36,7 @@ int main()
|
||||
// out_of_range.401
|
||||
try
|
||||
{
|
||||
// try to use a an invalid array index
|
||||
// try to use an invalid array index
|
||||
json::const_reference ref = j.at("/array/4"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
@ -58,7 +58,7 @@ int main()
|
||||
// out_of_range.403
|
||||
try
|
||||
{
|
||||
// try to use a JSON pointer to an nonexistent object key
|
||||
// try to use a JSON pointer to a nonexistent object key
|
||||
json::const_reference ref = j.at("/foo"_json_pointer);
|
||||
}
|
||||
catch (json::out_of_range& e)
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/lbZjdwg6yII33cV5"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/swnzqmd8zj6ij1fb"><b>online</b></a>
|
@ -81,7 +81,7 @@ int main()
|
||||
json j_list(c_list);
|
||||
|
||||
// create an array from std::forward_list
|
||||
std::forward_list<int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};
|
||||
std::forward_list<std::int64_t> c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543};
|
||||
json j_flist(c_flist);
|
||||
|
||||
// create an array from std::array
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/RodBcX8vpcP5dQ40"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/oWFo4AhVlMBjNv8E"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/oRn0YsYyurs0Zi5T"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/kVknQzPMpqjywTpG"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/yzkjGGzMOESBkCdH"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/eIOvQiuID2qgxp5u"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Vm0nR32x6co8rq40"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/w4TtEQzlVyokIrtp"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/mNy1nyabOkeHfHGf"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/a3H6kpORXgbVXylv"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/yXZGDwDHH3LOuFIr"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/fS4kfQG1hmhjMScn"><b>online</b></a>
|
16
doc/examples/binary.cpp
Normal file
16
doc/examples/binary.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a binary vector
|
||||
std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};
|
||||
|
||||
// create a binary JSON value with subtype 42
|
||||
json j = json::binary(vec, 42);
|
||||
|
||||
// output type and subtype
|
||||
std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
|
||||
}
|
1
doc/examples/binary.output
Normal file
1
doc/examples/binary.output
Normal file
@ -0,0 +1 @@
|
||||
type: binary, subtype: 42
|
10
doc/examples/binary_t.cpp
Normal file
10
doc/examples/binary_t.cpp
Normal file
@ -0,0 +1,10 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << std::boolalpha << std::is_same<nlohmann::byte_container_with_subtype<std::vector<std::uint8_t>>, json::binary_t>::value << std::endl;
|
||||
}
|
1
doc/examples/binary_t.output
Normal file
1
doc/examples/binary_t.output
Normal file
@ -0,0 +1 @@
|
||||
true
|
10
doc/examples/boolean_t.cpp
Normal file
10
doc/examples/boolean_t.cpp
Normal file
@ -0,0 +1,10 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << std::boolalpha << std::is_same<bool, json::boolean_t>::value << std::endl;
|
||||
}
|
1
doc/examples/boolean_t.output
Normal file
1
doc/examples/boolean_t.output
Normal file
@ -0,0 +1 @@
|
||||
true
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/hxcSxCPPLHpZMxjS"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/xbnldrrN05tKIOEv"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/gDQPYFxMrvD7RK4z"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/vVY4F4xKC3v6pG6F"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Q2GTzxF8NA10kVvD"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/6LRjg1bqwchPUoDx"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/JMDd9jiP0flRKJ6C"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/HdlqwPk8bDfrZ4AE"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/pbz3ULoJ4maRnV8N"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/fWfQhHzG03P6PAcC"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/GHVHgDpT5vx0KMPD"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/DyMiKrkKMwd3R7OU"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/p9P3Ph8mdxMON6SY"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/yMxKrJfRedlFygJD"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/zaexgkNdH3HYJm8D"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/eQ0YI8wWcMIHtBCS"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/SD62jUgeIuudweZu"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/gG3bN97HOF04Xw6S"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/WSnobkZJZHUPUIRF"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/GGoqGtqEzxAsAKnI"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/vky6QCTCqtUnNVlD"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/aQjZSjuuDUxXQCjJ"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/moO4IdryeGS8QmKo"><b>online</b></a>
|
@ -7,11 +7,11 @@ using json = nlohmann::json;
|
||||
int main()
|
||||
{
|
||||
// create byte vector
|
||||
std::vector<uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,
|
||||
0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,
|
||||
0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00
|
||||
};
|
||||
std::vector<std::uint8_t> v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d,
|
||||
0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73,
|
||||
0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// deserialize it with BSON
|
||||
json j = json::from_bson(v);
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Q7O1liz5QrgQynqQ"><b>online</b></a>
|
@ -7,10 +7,10 @@ using json = nlohmann::json;
|
||||
int main()
|
||||
{
|
||||
// create byte vector
|
||||
std::vector<uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,
|
||||
0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x61, 0x00
|
||||
};
|
||||
std::vector<std::uint8_t> v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,
|
||||
0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x61, 0x00
|
||||
};
|
||||
|
||||
// deserialize it with CBOR
|
||||
json j = json::from_cbor(v);
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/AjdbchxfTsN9PHCL"><b>online</b></a>
|
@ -7,10 +7,10 @@ using json = nlohmann::json;
|
||||
int main()
|
||||
{
|
||||
// create byte vector
|
||||
std::vector<uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,
|
||||
0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x61, 0x00
|
||||
};
|
||||
std::vector<std::uint8_t> v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63,
|
||||
0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x61, 0x00
|
||||
};
|
||||
|
||||
// deserialize it with MessagePack
|
||||
json j = json::from_msgpack(v);
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/TdJfkKx0RAH5NB62"><b>online</b></a>
|
@ -7,10 +7,10 @@ using json = nlohmann::json;
|
||||
int main()
|
||||
{
|
||||
// create byte vector
|
||||
std::vector<uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,
|
||||
0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,
|
||||
0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D
|
||||
};
|
||||
std::vector<std::uint8_t> v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61,
|
||||
0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68,
|
||||
0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D
|
||||
};
|
||||
|
||||
// deserialize it with UBJSON
|
||||
json j = json::from_ubjson(v);
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/GG9VzOZh1MDeTSsK"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/LtqaiI6oRplSg0KI"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/ddVSXnbULrNrCbRs"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/QjVgxx0bwbKuE9HI"><b>online</b></a>
|
16
doc/examples/get_binary.cpp
Normal file
16
doc/examples/get_binary.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
#include <iostream>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
int main()
|
||||
{
|
||||
// create a binary vector
|
||||
std::vector<std::uint8_t> vec = {0xCA, 0xFE, 0xBA, 0xBE};
|
||||
|
||||
// create a binary JSON value with subtype 42
|
||||
json j = json::binary(vec, 42);
|
||||
|
||||
// output type and subtype
|
||||
std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl;
|
||||
}
|
1
doc/examples/get_binary.output
Normal file
1
doc/examples/get_binary.output
Normal file
@ -0,0 +1 @@
|
||||
type: binary, subtype: 42
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/eA1KrytMlQl1SURe"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/jVaWWe3kAjKKn99V"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/UvdMlXdPnXFUq1lJ"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/N1nlz2liDCmBn40h"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/eoHfSYf04soRkOto"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/oNhgDq5ejDl5RyqW"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/LdmbgtdndQw81wQU"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/kp99ButEWpuNxPbq"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/oUdIj3ZSbg7UCIuz"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/2ZgSEJ7UBJ9d4H6b"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/to5RDM1vhrDMUfVv"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/20OXaCBWTM1dhFmv"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/rTNvfIpTXdFXIe20"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/GCQOJn7fTbm6kPBo"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/guySOWaTCKiXcueC"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/371XB9Jo3cwHDIBc"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/qzb1GYNdSbeVRamt"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/wcfMOOVBjQMZ6iQi"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/I9UET2tNOZLYKvf9"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/wdEBCnH75A2tWTPp"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/Lcz1noVRzYcB7vXP"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/1eYTBWunXeo3dEXD"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/ScW4gbehjRyjHyPZ"><b>online</b></a>
|
@ -9,6 +9,12 @@ int main()
|
||||
json j_object = {{"one", 1}, {"two", 2}};
|
||||
json j_array = {1, 2, 4, 8, 16};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// The static function iterator_wrapper was deprecated in version 3.1.0
|
||||
// and will be removed in version 4.0.0. Please replace all occurrences
|
||||
// of iterator_wrapper(j) with j.items().
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// example for an object
|
||||
for (auto& x : json::iterator_wrapper(j_object))
|
||||
{
|
||||
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/CwtYFd6vT8GjFFcd"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/FTpanTtjcQQjZc2F"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/qjWp2KSJctelS7Fe"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/0iAoI04B7iJcG1pW"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/CL6FBsykrydDhRTF"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/qbzJzB74w6QVdKPu"><b>online</b></a>
|
@ -1 +0,0 @@
|
||||
<a target="_blank" href="https://wandbox.org/permlink/9yiqfnfuF223zRfi"><b>online</b></a>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user