///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

:leveloffset: 1

[[core,Core]]
= Core =

== Overview ==

The Zest™ Core is composed of several artifacts described in this section.

The following figure show the Core artifacts alongside <<libraries,libraries>> and <<extensions,extensions>>, and, in green,
typical applications artifacts. This is not a full code dependency graph but should give you a good overview of how the
pieces fit together. Find out more about each of the Zest™ Core artifacts below.

.Zest™ Core Overview
image::core-overview.png[]

//*<<core-api,Core API>>*
=== Core API ===

//____
The Zest™ Core API is the primary interface for client application code during the main execution phase, i.e. after the
application has been activated.

<<core-api,Learn more>>
//____

//*<<core-bootstrap-assembly,Core Bootstrap>>*
=== Core Bootstrap ===
//____
Zest™ has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
is defined programmatically. Once all the layers, modules and all the composite types in each module have been defined
the model is instantiated into an application. This enables the entire _structure_ system in Zest, where types "belongs"
to a module and visibility rules define default behaviors, enforcement of architectural integrity and much more.

<<core-bootstrap-assembly,Learn more>>
//____

//*<<core-testsupport,Core Test Support>>*
=== Core Test Support ===
//____
Zest™ comes with classes to help with testing. There is also some mocking support, to allow some of Zest’s unique
aspects to be mocked, but since Zest™ is so flexible at a fine-granular level, we have found that mocking is seldom,
if ever, needed.

<<core-testsupport,Learn more>>
//____

//*<<core-functional,Core Functional API>>*
=== Core Functional API ===
//____
The Zest™ Core Functional API is a generic package to work with Iterables in a "functional programming language" style.

This package is completely independent of everything else in Zest™ and may be used on its own in any kind of environment
such as Spring or Java EE applications.

<<core-functional,Learn more>>
//____

//*<<core-io,Core I/O API>>*
=== Core I/O API ===
//____
The Zest™ Core I/O API tries to address the problem around shuffling data around from various I/O inputs and outputs,
possibly with transformations and filtering along the way.

<<core-io,Learn more>>
//____

//*<<core-spi,Core Extension SPI>>*
=== Core Extension SPI ===
//____
The Zest™ Core Runtime has a number of extension points, which we call the _Zest™ Core Extension SPI_. These are defined
interfaces used *only* by the Core Runtime and *never* directly by application code. <<extensions>> are assembled in
applications during the bootstrap phase.

<<core-spi,Learn more>>
//____

//*<<core-spi,Core Runtime>>*
=== Core Runtime ===
//____
Your code should *never*, *ever*, have a dependency on Zest™ Core Runtime. If you think you need this, you should
probably contact dev@zest.apache.org and see if your usecase can either be solved in a existing way or
perhaps that a new Core Extension SPI is needed.

<<core-runtime,Learn more>>
//____


:leveloffset: 2

include::../../../../core/api/src/docs/api.txt[]

:leveloffset: 2

include::../../../../core/bootstrap/src/docs/bootstrap.txt[]

:leveloffset: 2

include::../../../../core/testsupport/src/docs/testsupport.txt[]

:leveloffset: 2

include::../../../../core/functional/src/docs/functional.txt[]

:leveloffset: 2

include::../../../../core/io/src/docs/io.txt[]

:leveloffset: 2

include::../../../../core/spi/src/docs/spi.txt[]

:leveloffset: 2

include::../../../../core/runtime/src/docs/runtime.txt[]

:leveloffset: 2
