flag

package
v0.0.0-...-e4dbece Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 9, 2024 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Overview

Package flag should not be imported by external consumers. It was not designed for external use.

Index

Constants

View Source
const (
	AllowedUnits = "mg"
)
View Source
const DefaultLocalAddress = "localhost"
View Source
const WorkAroundPrefix = "\U000026f3"

WorkAroundPrefix is the flag in hole emoji

Variables

This section is empty.

Functions

func ParseStringToInt

func ParseStringToInt(str string) (int, error)

Types

type APIPath

type APIPath struct {
	Path string `positional-arg-name:"PATH" required:"true" description:"The API endpoint"`
}

type APITarget

type APITarget struct {
	URL string `positional-arg-name:"URL" description:"API URL to target"`
}

type AddNetworkPolicyArgs

type AddNetworkPolicyArgs struct {
	SourceApp string `positional-arg-name:"SOURCE_APP" required:"true" description:"The source app"`
}

type AddPluginRepoArgs

type AddPluginRepoArgs struct {
	PluginRepoName string `positional-arg-name:"REPO_NAME" required:"true" description:"The plugin repo name"`
	PluginRepoURL  string `positional-arg-name:"URL" required:"true" description:"The URL to the plugin repo"`
}

type AppDomain

type AppDomain struct {
	App    string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	Domain string `positional-arg-name:"DOMAIN" required:"true" description:"The domain"`
}

type AppInstance

type AppInstance struct {
	AppName string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	Index   int    `positional-arg-name:"INDEX" required:"true" description:"The index of the application instance"`
}

type AppName

type AppName struct {
	AppName string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
}

type AppRenameArgs

type AppRenameArgs struct {
	OldAppName string `positional-arg-name:"APP_NAME" required:"true" description:"The old application name"`
	NewAppName string `positional-arg-name:"NEW_APP_NAME" required:"true" description:"The new application name"`
}

type AppType

type AppType string

func (AppType) Complete

func (AppType) Complete(prefix string) []flags.Completion

type Authentication

type Authentication struct {
	Username string `positional-arg-name:"USERNAME" description:"The username"`
	Password string `positional-arg-name:"PASSWORD" description:"The password"`
}

type BindSecurityGroupArgs

type BindSecurityGroupArgs struct {
	SecurityGroupName string `positional-arg-name:"SECURITY_GROUP" required:"true" description:"The security group name"`
	OrganizationName  string `positional-arg-name:"ORG" required:"true" description:"The organization group name"`
	SpaceName         string `positional-arg-name:"SPACE" description:"The space name"`
}

type BindServiceArgs

type BindServiceArgs struct {
	AppName             string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	ServiceInstanceName string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance"`
}

type BindingName

type BindingName struct {
	Value string
}

func (*BindingName) UnmarshalFlag

func (b *BindingName) UnmarshalFlag(val string) error

type Buildpack

type Buildpack struct {
	types.FilteredString
}

func (*Buildpack) UnmarshalFlag

func (b *Buildpack) UnmarshalFlag(val string) error

type BuildpackName

type BuildpackName struct {
	Buildpack string `positional-arg-name:"BUILDPACK" required:"true" description:"The buildpack"`
}

type Color

type Color struct {
	Color bool
}

func (Color) Complete

func (Color) Complete(prefix string) []flags.Completion

func (*Color) UnmarshalFlag

func (c *Color) UnmarshalFlag(val string) error

type Command

type Command struct {
	types.FilteredString
}

func (*Command) UnmarshalFlag

func (b *Command) UnmarshalFlag(val string) error

type CommandName

type CommandName struct {
	CommandName string `positional-arg-name:"COMMAND_NAME" description:"The command name"`
}

type CopySourceArgs

type CopySourceArgs struct {
	SourceAppName string `positional-arg-name:"SOURCE-APP" required:"true" description:"The old application name"`
	TargetAppName string `positional-arg-name:"TARGET-NAME" required:"true" description:"The new application name"`
}

type CreateBuildpackArgs

type CreateBuildpackArgs struct {
	Buildpack string                      `positional-arg-name:"BUILDPACK" required:"true" description:"The buildpack"`
	Path      PathWithExistenceCheckOrURL `positional-arg-name:"PATH" required:"true" description:"The path to the buildpack file"`
	Position  int                         `positional-arg-name:"POSITION" required:"true" description:"The position that sets priority"`
}

type CreateServiceArgs

type CreateServiceArgs struct {
	Service         string `positional-arg-name:"SERVICE" required:"true" description:"The service offering"`
	ServicePlan     string `positional-arg-name:"SERVICE_PLAN" required:"true" description:"The service plan that the service instance will use"`
	ServiceInstance string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance"`
}

type CreateUser

type CreateUser struct {
	Username string  `positional-arg-name:"USERNAME" required:"true" description:"The username"`
	Password *string `positional-arg-name:"PASSWORD" description:"The password"`
}

type DeleteLabelArgs

type DeleteLabelArgs struct {
	ResourceType string   `positional-arg-name:"RESOURCE" required:"true" description:"The type of resource"`
	ResourceName string   `positional-arg-name:"RESOURCE_NAME" required:"true" description:"The name of the resource"`
	LabelKeys    []string `positional-arg-name:"KEY" required:"true" description:"A label to delete on the resource"`
}

type DeleteServiceAuthTokenArgs

type DeleteServiceAuthTokenArgs struct {
	Label    string `positional-arg-name:"LABEL" required:"true" description:"The token label"`
	Provider string `positional-arg-name:"PROVIDER" required:"true" description:"The token provider"`
}

type DockerImage

type DockerImage struct {
	Path string
}

func (*DockerImage) UnmarshalFlag

func (d *DockerImage) UnmarshalFlag(val string) error

type Domain

type Domain struct {
	Domain string `positional-arg-name:"DOMAIN" required:"true" description:"The domain"`
}

type Droplet

type Droplet struct {
	Path string
}

func (*Droplet) UnmarshalFlag

func (d *Droplet) UnmarshalFlag(val string) error

type EnvironmentArgs

type EnvironmentArgs struct {
	AppName string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
}

type EnvironmentVariable

type EnvironmentVariable string

func (EnvironmentVariable) Complete

func (EnvironmentVariable) Complete(prefix string) []flags.Completion

func (*EnvironmentVariable) UnmarshalFlag

func (e *EnvironmentVariable) UnmarshalFlag(val string) error

type Feature

type Feature struct {
	Feature string `positional-arg-name:"FEATURE_NAME" required:"true" description:"The feature flag name"`
}

type FilesArgs

type FilesArgs struct {
	AppName string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	Path    string `positional-arg-name:"PATH" description:"The file path"`
}

type HealthCheckType

type HealthCheckType struct {
	Type constant.HealthCheckType
}

func (HealthCheckType) Complete

func (HealthCheckType) Complete(prefix string) []flags.Completion

func (*HealthCheckType) UnmarshalFlag

func (h *HealthCheckType) UnmarshalFlag(val string) error

type HealthCheckTypeWithDeprecatedValue

type HealthCheckTypeWithDeprecatedValue struct {
	Type string
}

func (HealthCheckTypeWithDeprecatedValue) Complete

func (*HealthCheckTypeWithDeprecatedValue) UnmarshalFlag

func (h *HealthCheckTypeWithDeprecatedValue) UnmarshalFlag(val string) error

type HostDomain

type HostDomain struct {
	Host   string `positional-arg-name:"HOST" required:"true" description:"The hostname"`
	Domain string `positional-arg-name:"DOMAIN" required:"true" description:"The domain"`
}

type InstallPluginArgs

type InstallPluginArgs struct {
	PluginNameOrLocation Path `` /* 230-byte string literal not displayed */
}

type Instances

type Instances struct {
	types.NullInt
}

func (*Instances) IsValidValue

func (i *Instances) IsValidValue(val string) error

func (*Instances) UnmarshalFlag

func (i *Instances) UnmarshalFlag(val string) error

type IsolationSegmentName

type IsolationSegmentName struct {
	IsolationSegmentName string `positional-arg-name:"SEGMENT_NAME" required:"true" description:"The isolation segment name"`
}

type JSONOrFileWithValidation

type JSONOrFileWithValidation map[string]interface{}

func (JSONOrFileWithValidation) Complete

func (JSONOrFileWithValidation) Complete(prefix string) []flags.Completion

func (*JSONOrFileWithValidation) UnmarshalFlag

func (p *JSONOrFileWithValidation) UnmarshalFlag(pathOrJSON string) error

type LabelsArgs

type LabelsArgs struct {
	ResourceType string `positional-arg-name:"RESOURCE" required:"true" description:"The type of resource to label"`
	ResourceName string `positional-arg-name:"RESOURCE_NAME" required:"true" description:"The name of the resource"`
}

type Locale

type Locale struct {
	Locale string
}

func (Locale) Complete

func (l Locale) Complete(prefix string) []flags.Completion

func (*Locale) UnmarshalFlag

func (l *Locale) UnmarshalFlag(val string) error

type Megabytes

type Megabytes struct {
	types.NullUint64
}

func (*Megabytes) UnmarshalFlag

func (m *Megabytes) UnmarshalFlag(val string) error

type MemoryWithUnlimited

type MemoryWithUnlimited int64

func (*MemoryWithUnlimited) UnmarshalFlag

func (m *MemoryWithUnlimited) UnmarshalFlag(val string) error

TODO:Code for this flag exists in cf/formatters/bytes.go, move tests from there to here

type MigrateServiceInstancesArgs

type MigrateServiceInstancesArgs struct {
	V1Service  string `positional-arg-name:"v1_SERVICE" required:"true" description:"The old service offering"`
	V1Provider string `positional-arg-name:"v1_PROVIDER" required:"true" description:"The old service provider"`
	V1Plan     string `positional-arg-name:"v1_PLAN" required:"true" description:"The old service plan"`
	V2Service  string `positional-arg-name:"v2_SERVICE" required:"true" description:"The new service offering"`
	V2Plan     string `positional-arg-name:"v2_PLAN" required:"true" description:"The new service plan"`
}

type NetworkPort

type NetworkPort struct {
	StartPort int
	EndPort   int
}

func (*NetworkPort) UnmarshalFlag

func (np *NetworkPort) UnmarshalFlag(val string) error

type NetworkProtocol

type NetworkProtocol struct {
	Protocol string
}

func (NetworkProtocol) Complete

func (NetworkProtocol) Complete(prefix string) []flags.Completion

func (*NetworkProtocol) UnmarshalFlag

func (h *NetworkProtocol) UnmarshalFlag(val string) error

type OptionalAppName

type OptionalAppName struct {
	AppName string `positional-arg-name:"APP_NAME" description:"The application name"`
}

type OrgDomain

type OrgDomain struct {
	Organization string `positional-arg-name:"ORG" required:"true" description:"The organization"`
	Domain       string `positional-arg-name:"DOMAIN" required:"true" description:"The domain"`
}

type OrgIsolationArgs

type OrgIsolationArgs struct {
	OrganizationName     string `positional-arg-name:"ORG_NAME" required:"true" description:"The organization name"`
	IsolationSegmentName string `positional-arg-name:"SEGMENT_NAME" required:"true" description:"The isolation segment name"`
}

type OrgRole

type OrgRole struct {
	Role string
}

func (OrgRole) Complete

func (OrgRole) Complete(prefix string) []flags.Completion

func (*OrgRole) UnmarshalFlag

func (o *OrgRole) UnmarshalFlag(val string) error

type OrgSpace

type OrgSpace struct {
	Organization string `positional-arg-name:"ORG" required:"true" description:"The organization"`
	Space        string `positional-arg-name:"SPACE" required:"true" description:"The space"`
}

type Organization

type Organization struct {
	Organization string `positional-arg-name:"ORG" required:"true" description:"The organization"`
}

type ParamsAsJSON

type ParamsAsJSON struct {
	JSON string `positional-arg-name:"JSON" required:"true" description:"Parameters as JSON"`
}

type Path

type Path string

func (Path) Complete

func (Path) Complete(prefix string) []flags.Completion

func (Path) String

func (p Path) String() string

type PathWithAt

type PathWithAt string

func (PathWithAt) Complete

func (PathWithAt) Complete(prefix string) []flags.Completion

type PathWithBool

type PathWithBool string

func (PathWithBool) Complete

func (PathWithBool) Complete(prefix string) []flags.Completion

type PathWithExistenceCheck

type PathWithExistenceCheck string

func (PathWithExistenceCheck) Complete

func (PathWithExistenceCheck) Complete(prefix string) []flags.Completion

func (*PathWithExistenceCheck) UnmarshalFlag

func (p *PathWithExistenceCheck) UnmarshalFlag(path string) error

type PathWithExistenceCheckOrURL

type PathWithExistenceCheckOrURL string

func (PathWithExistenceCheckOrURL) Complete

func (*PathWithExistenceCheckOrURL) UnmarshalFlag

func (p *PathWithExistenceCheckOrURL) UnmarshalFlag(path string) error

type PluginName

type PluginName struct {
	PluginName string `positional-arg-name:"PLUGIN_NAME" required:"true" description:"The plugin name"`
}

type PluginRepoName

type PluginRepoName struct {
	PluginRepoName string `positional-arg-name:"REPO_NAME" required:"true" description:"The plugin repo name"`
}

type Port

type Port struct {
	types.NullInt
}

func (*Port) IsValidValue

func (i *Port) IsValidValue(val string) error

IsValidValue returns an error if the input value is not an integer.

func (*Port) UnmarshalFlag

func (i *Port) UnmarshalFlag(val string) error

type PositiveInteger

type PositiveInteger struct {
	Value int64
}

func (*PositiveInteger) UnmarshalFlag

func (posInt *PositiveInteger) UnmarshalFlag(rawValue string) error

type Quota

type Quota struct {
	Quota string `positional-arg-name:"QUOTA" required:"true" description:"The organization quota"`
}

type RemoveNetworkPolicyArgs

type RemoveNetworkPolicyArgs struct {
	SourceApp string
}

type RenameBuildpackArgs

type RenameBuildpackArgs struct {
	OldBuildpackName string `positional-arg-name:"BUILDPACK_NAME" required:"true" description:"The old buildpack name"`
	NewBuildpackName string `positional-arg-name:"NEW_BUILDPACK_NAME" required:"true" description:"The new buildpack name"`
}

type RenameOrgArgs

type RenameOrgArgs struct {
	OldOrgName string `positional-arg-name:"ORG" required:"true" description:"The old organization name"`
	NewOrgName string `positional-arg-name:"NEW_ORG" required:"true" description:"The new organization name"`
}

type RenameServiceArgs

type RenameServiceArgs struct {
	ServiceInstance        string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance to rename"`
	NewServiceInstanceName string `positional-arg-name:"NEW_SERVICE_INSTANCE" required:"true" description:"The new name of the service instance"`
}

type RenameServiceBrokerArgs

type RenameServiceBrokerArgs struct {
	OldServiceBrokerName string `positional-arg-name:"SERVICE_BROKER" required:"true" description:"The old service broker name"`
	NewServiceBrokerName string `positional-arg-name:"NEW_SERVICE_BROKER" required:"true" description:"The new service broker name"`
}

type RenameSpaceArgs

type RenameSpaceArgs struct {
	OldSpaceName string `positional-arg-name:"SPACE_NAME" required:"true" description:"The old space name"`
	NewSpaceName string `positional-arg-name:"NEW_SPACE_NAME" required:"true" description:"The new space name"`
}

type ResetOrgDefaultIsolationArgs

type ResetOrgDefaultIsolationArgs struct {
	OrgName string `positional-arg-name:"ORG_NAME" required:"true" description:"The organization name"`
}

type ResetSpaceIsolationArgs

type ResetSpaceIsolationArgs struct {
	SpaceName string `positional-arg-name:"SPACE_NAME" required:"true" description:"The space name"`
}

type RoutePath

type RoutePath struct {
	Path string
}

func (*RoutePath) UnmarshalFlag

func (h *RoutePath) UnmarshalFlag(val string) error

type RouteServiceArgs

type RouteServiceArgs struct {
	Domain          string `positional-arg-name:"DOMAIN" required:"true" description:"The domain of the route"`
	ServiceInstance string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance"`
}

type RunTaskArgs

type RunTaskArgs struct {
	AppName string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	Command string `positional-arg-name:"COMMAND" required:"true" description:"The command to execute"`
}

type SSHPortForwarding

type SSHPortForwarding struct {
	LocalAddress  string
	RemoteAddress string
}

func (*SSHPortForwarding) UnmarshalFlag

func (s *SSHPortForwarding) UnmarshalFlag(val string) error

type SecurityGroup

type SecurityGroup struct {
	ServiceGroup string `positional-arg-name:"SECURITY_GROUP" required:"true" description:"The security group"`
}

type SecurityGroupArgs

type SecurityGroupArgs struct {
	SecurityGroup   string                 `positional-arg-name:"SECURITY_GROUP" required:"true" description:"The security group"`
	PathToJSONRules PathWithExistenceCheck `` /* 128-byte string literal not displayed */
}

type SecurityGroupLifecycle

type SecurityGroupLifecycle string

func (SecurityGroupLifecycle) Complete

func (SecurityGroupLifecycle) Complete(prefix string) []flags.Completion

type Service

type Service struct {
	Service string `positional-arg-name:"SERVICE" required:"true" description:"The service offering name"`
}

type ServiceAuthTokenArgs

type ServiceAuthTokenArgs struct {
	Label    string `positional-arg-name:"LABEL" required:"true" description:"The token label"`
	Provider string `positional-arg-name:"PROVIDER" required:"true" description:"The token provider"`
	Token    string `positional-arg-name:"TOKEN" required:"true" description:"The token"`
}

type ServiceBroker

type ServiceBroker struct {
	ServiceBroker string `positional-arg-name:"SERVICE_BROKER" required:"true" description:"The service broker"`
}

type ServiceBrokerArgs

type ServiceBrokerArgs struct {
	ServiceBroker string `positional-arg-name:"SERVICE_BROKER" required:"true" description:"The service broker name"`
	Username      string `positional-arg-name:"USERNAME" required:"true" description:"The username"`
	Password      string `positional-arg-name:"PASSWORD" required:"true" description:"The password"`
	URL           string `positional-arg-name:"URL" required:"true" description:"The URL of the service broker"`
}

type ServiceInstance

type ServiceInstance struct {
	ServiceInstance string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance name"`
}

type ServiceInstanceKey

type ServiceInstanceKey struct {
	ServiceInstance string `positional-arg-name:"SERVICE_INSTANCE" required:"true" description:"The service instance"`
	ServiceKey      string `positional-arg-name:"SERVICE_KEY" required:"true" description:"The service key"`
}

type SetEnvironmentArgs

type SetEnvironmentArgs struct {
	AppName                  string              `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	EnvironmentVariableName  string              `positional-arg-name:"ENV_VAR_NAME" required:"true" description:"The environment variable name"`
	EnvironmentVariableValue EnvironmentVariable `positional-arg-name:"ENV_VAR_VALUE" required:"true" description:"The environment variable value"`
}

type SetHealthCheckArgs

type SetHealthCheckArgs struct {
	AppName     string          `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	HealthCheck HealthCheckType `positional-arg-name:"HEALTH_CHECK_TYPE" required:"true" description:"Set to 'port'"`
}

type SetLabelArgs

type SetLabelArgs struct {
	ResourceType string   `positional-arg-name:"RESOURCE" required:"true" description:"The type of resource to label"`
	ResourceName string   `positional-arg-name:"RESOURCE_NAME" required:"true" description:"The name of the resource"`
	Labels       []string `positional-arg-name:"KEY=VALUE" required:"true" description:"A space-separated list of labels to set on the resource"`
}

type SetOrgQuotaArgs

type SetOrgQuotaArgs struct {
	Organization string `positional-arg-name:"ORG" required:"true" description:"The organization"`
	Quota        string `positional-arg-name:"QUOTA" required:"true" description:"The quota"`
}

type SetOrgRoleArgs

type SetOrgRoleArgs struct {
	Username     string  `positional-arg-name:"USERNAME" required:"true" description:"The user"`
	Organization string  `positional-arg-name:"ORG" required:"true" description:"The organization"`
	Role         OrgRole `positional-arg-name:"ROLE" required:"true" description:"The organization role"`
}

type SetSpaceQuotaArgs

type SetSpaceQuotaArgs struct {
	Space      string `positional-arg-name:"SPACE_NAME" required:"true" description:"The space"`
	SpaceQuota string `positional-arg-name:"SPACE_QUOTA" required:"true" description:"The space quota"`
}

type SetSpaceRoleArgs

type SetSpaceRoleArgs struct {
	Username     string    `positional-arg-name:"USERNAME" required:"true" description:"The user"`
	Organization string    `positional-arg-name:"ORG" required:"true" description:"The organization"`
	Space        string    `positional-arg-name:"SPACE" required:"true" description:"The space"`
	Role         SpaceRole `positional-arg-name:"ROLE" required:"true" description:"The space role"`
}

type Space

type Space struct {
	Space string `positional-arg-name:"SPACE" required:"true" description:"The space"`
}

type SpaceDomain

type SpaceDomain struct {
	Space  string `positional-arg-name:"SPACE" required:"true" description:"The space"`
	Domain string `positional-arg-name:"DOMAIN" required:"true" description:"The domain"`
}

type SpaceIsolationArgs

type SpaceIsolationArgs struct {
	SpaceName            string `positional-arg-name:"SPACE_NAME" required:"true" description:"The space name"`
	IsolationSegmentName string `positional-arg-name:"SEGMENT_NAME" required:"true" description:"The isolation segment name"`
}

type SpaceQuota

type SpaceQuota struct {
	SpaceQuota string `positional-arg-name:"SPACE_QUOTA_NAME" required:"true" description:"The space quota"`
}

type SpaceRole

type SpaceRole struct {
	Role string
}

func (SpaceRole) Complete

func (SpaceRole) Complete(prefix string) []flags.Completion

func (*SpaceRole) UnmarshalFlag

func (s *SpaceRole) UnmarshalFlag(val string) error

type StackName

type StackName struct {
	StackName string `positional-arg-name:"STACK_NAME" required:"true" description:"The stack name"`
}

type Tags

type Tags []string

func (*Tags) UnmarshalFlag

func (t *Tags) UnmarshalFlag(value string) error

type TerminateTaskArgs

type TerminateTaskArgs struct {
	AppName    string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	SequenceID string `positional-arg-name:"TASK_ID" required:"true" description:"The task's unique sequence ID"`
}

type UnbindSecurityGroupArgs

type UnbindSecurityGroupArgs struct {
	SecurityGroupName string `positional-arg-name:"SECURITY_GROUP" required:"true" description:"The security group name"`
	OrganizationName  string `positional-arg-name:"ORG" description:"The organization group name"`
	SpaceName         string `positional-arg-name:"SPACE" description:"The space name"`
}

type UnsetEnvironmentArgs

type UnsetEnvironmentArgs struct {
	AppName                 string `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	EnvironmentVariableName string `positional-arg-name:"ENV_VAR_NAME" required:"true" description:"The environment variable name"`
}

type Username

type Username struct {
	Username string `positional-arg-name:"USERNAME" required:"true" description:"The username"`
}

type V6SetHealthCheckArgs

type V6SetHealthCheckArgs struct {
	AppName     string                             `positional-arg-name:"APP_NAME" required:"true" description:"The application name"`
	HealthCheck HealthCheckTypeWithDeprecatedValue `positional-arg-name:"HEALTH_CHECK_TYPE" required:"true" description:"Set to 'port' or 'none'"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL