1 unstable release
0.0.1 | Dec 27, 2022 |
---|
#16 in #git-directory
40 downloads per month
Used in 7 crates
23KB
237 lines
The Traits
This project only provides traits. The idea behind this is that a complete implementation can have pieces from several other implementations and still work, only having to rewrite parts of it.
A project manager executable that implements all the traits can do six things:
- Install from an URL
- Know what has been installed
- Update installed projects
- Edit project setups
- Go back to the previous version
- Uninstall projects
It divides the implementations in three parts
The Package Manager
It is composed by tree traits and an error enum
The first trait is the PMOperations
. It handles the "low level" stuff, so
that the other traits have really easy implementations
The PMProgramatic
and the PMInteractive
define methods to achive the six
tasks in different ways. PMProgramatic
is oriented towards being an API for
programmers interacting with the project manager, and PMInteractive
is
oriented towards being used by a CLI application or some other way to interact
with final users.
agpm_pm::ProjectManager
is a struct that implements all three traits
The Directories
It is the PMDirs
trait
The directories are where the store should write its stuff and where the project manager should put the projects.
The project manager uses three different directories
- The src directory, where projects are built
- The git directory, where projects are downloaded and updated (but never built)
- The old directory, where projects are stored in case going back is needed
A structure that implements this trait is the agpm_dirs::PMDirsImpl
The Store
The store is how the project configurations are stored. It holds two traits
ProjectT
and ProjectStore
The first is a trait that allows the project manager traits to interact with individual project configurations and setups.
The second trait allows project managers to store new projects, and delete them.
The types that implement these traits are agpm_project::Project
and
agpm_store::ProjectStore
Dependencies
~11MB
~248K SLoC