Skip to main content

ravenrs_app/
lib.rs

1//! The model of a business application, with no GUI: entities, a layered application
2//! model, object spaces, actions, controllers, frames and modules.
3//!
4//! ```
5//! use ravenrs_app::{EntityInfo, FieldInfo, FieldKind, MemoryDatabase, ModelLayers, ModelLayer, ObjectSpace, generate_model};
6//!
7//! let account = EntityInfo::new("Account")
8//!     .caption("Conta")
9//!     .navigation("Cadastros")
10//!     .field(FieldInfo::new("id", FieldKind::Integer).key())
11//!     .field(FieldInfo::new("name", FieldKind::Text).caption("Nome").default_property());
12//!
13//! // The model: a list, a form and a place in the navigation, changed by a layer.
14//! let mut layers = ModelLayers::new(generate_model(std::slice::from_ref(&account))?);
15//! layers.set(&ModelLayer::User, &["NavigationItems", "Cadastros"], "Caption", "Registros".into());
16//! let model = layers.merged();
17//! assert_eq!(model.root.at(&["NavigationItems", "Cadastros"]).and_then(|n| n.text("Caption")), Some("Registros"));
18//!
19//! // The records: nothing is kept until the commit.
20//! let mut space = MemoryDatabase::new(vec![account])?.space();
21//! let mut object = space.new_object("Account")?;
22//! object.set("name", "Corrente");
23//! space.save(object)?;
24//! assert!(space.is_modified());
25//! space.commit()?;
26//! # Ok::<(), Box<dyn std::error::Error>>(())
27//! ```
28
29mod action;
30mod appearance;
31mod controller;
32mod entity;
33mod files;
34mod frame;
35mod functions;
36mod job;
37#[cfg(feature = "live")]
38mod live_list;
39mod model;
40mod module;
41mod object;
42mod record_action;
43mod security;
44#[cfg(feature = "source")]
45mod source;
46mod space;
47mod validation;
48mod workflow;
49
50pub use action::{
51    Action, ActionCategory, ActionContext, ActionError, ActionInput, ActionKind, ActionResult, ChoiceItem,
52    CriteriaMode, Message, MessageKind, Nesting, REASON_APPEARANCE, REASON_CONTROLLER, REASON_CRITERIA,
53    REASON_RUNNING, REASON_SCOPE, REASON_SECURITY, REASON_SELECTION, Reasons, Selection, TargetScope,
54};
55pub use appearance::{Appearance, AppearanceContext, AppearanceRule, AppearanceTarget, Tint};
56pub use controller::{ViewController, WindowController};
57pub use entity::{
58    DataAccess, EntityInfo, EnumOption, FieldInfo, FieldKind, ListFilter, ModelError, Object, ViewVariant,
59};
60pub use files::{AttachmentStore, MemoryAttachmentStore};
61pub use frame::{Frame, FrameContext, FrameEvent, ViewInfo, ViewKind};
62pub use functions::{environment, register_function};
63pub use job::{Job, JobChange, JobContext, JobWaker, JobWork};
64#[cfg(not(target_arch = "wasm32"))]
65pub use model::FileStore;
66pub use model::{
67    Diff, EmbeddedStore, MemoryModelStore, MergedModel, ModelLayer, ModelLayers, ModelNode, ModelStore,
68    StoredModel, UnusableNode, check_model, generate_model,
69};
70pub use module::{Application, ApplicationBuilder, DashboardContent, DashboardInfo, DashboardItem, Module};
71pub use object::{BusinessObject, FieldValue, ObjectSpaceExt};
72pub use ravenrs_app_derive::{BusinessEnum, BusinessObject};
73#[cfg(not(target_arch = "wasm32"))]
74pub use ravenrs_core::FileStorage;
75pub use ravenrs_core::{MemoryStorage, Storage};
76pub use ravenrs_criteria::{Criteria, Value};
77pub use record_action::RecordAction;
78pub use security::{
79    ADMINISTRATORS_ROLE, Access, AuditMode, AuditSettings, AuditTrail, AuditedObjectSpace, AuthError,
80    Authenticator, Credentials, Identity, MIN_PASSWORD_CHARS, Operation, PasswordError, PermissionPolicy,
81    Permissions, Role, RoleMerge, SECURITY_ACTION_PERMISSION, SECURITY_AUDIT_ENTRY,
82    SECURITY_MEMBER_PERMISSION, SECURITY_NAVIGATION_PERMISSION, SECURITY_OBJECT_PERMISSION, SECURITY_ROLE,
83    SECURITY_TYPE_PERMISSION, SECURITY_USER, SECURITY_USER_ROLE, SecuredObjectSpace, SecurityContext,
84    SpaceMaker, UserDirectory, audit_entity, hash_password, security_entities, verify_password,
85};
86#[cfg(feature = "source")]
87pub use source::{SourceError, entities_from_source, entities_from_spec};
88pub use space::{
89    Change, ChangeSet, MemoryDatabase, MemoryObjectSpace, Merged, ObjectSpace, Query, SpaceError, SpaceEvent,
90    SpaceWatcher, check_query, key_of, key_text, merge_changes, run_query,
91};
92pub use validation::{
93    CONTEXT_DELETE, CONTEXT_SAVE, Comparison, Operand, Rule, RuleKind, RuleWords, Severity, TextComparison,
94    Violation, validate, validate_in_place,
95};
96pub use workflow::{Reminder, StateMachine, Transition, check_transitions, local_now, reminders_of};
97
98/// Registers this crate's types with a playground's interpreter (feature `live`).
99#[cfg(feature = "live")]
100pub fn live_expose(registry: &mut ravenrs_live::Registry) {
101    live_list::expose_all(registry);
102}