///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-constraints,Constraints Library]]
= Constraints =

[devstatus]
--------------
source=libraries/constraints/dev-status.xml
--------------

The Constraints library provide a bunch of often used Constraints based on the
Zest™ Constraints api described in <<def-constraint>>.

Remember that you are not limited to constraints presents in this library, you
are encouraged to write your own constraints. See <<howto-create-constraint>>
or take a look at this library source code to learn how to write your own.

include::../../build/docs/buildinfo/artifact.txt[]

== Usage ==

You can use theses constraints on Properties or on method arguments.
Here are some examples:

[snippet,java]
----
source=libraries/constraints/src/test/java/org/apache/zest/library/constraints/TestCaseComposite.java
tag=constraints
----

